Ответы пользователя по тегу MySQL
  • Как составить сложную выборку из двух таблиц?

    kawabanga
    @kawabanga
    SELECT t2.address, t2. office, t1.fio, t2.counter, t1.value (только этого поля нет у вас)
    FROM table2 t2
    LEFT JOIN table1 ON t1.office=t2.office
    Ответ написан
  • Есть ли более компактный способ сделать выборку из БД?

    kawabanga
    @kawabanga
    Для той постановки задачи что вы задали

    function generateTFilter($numT) {
        $filter = "";
        for ($i = 1; $i <= $numT; $i++) {
            $filter .= " OR t{$i} > 0";
        }
        return ltrim($filter, " OR");
    }
    
    $numT = 17; // Укажите нужное количество переменных t
    
    $sql = "SELECT * FROM products WHERE category = ? AND (" . generateTFilter($numT) . ")";


    Но, представьте, что магазинов станет 50 или 100? А как вы будете считать приход и списание со складов? А товары в пути? Вам бы продумать архитектуру хорошенько.
    Ответ написан
    3 комментария
  • Как произвести поиск по огромной базе моментально и вывести данные?

    kawabanga
    @kawabanga
    Сделайте сперва запрос в SQL.
    Поймите слабые места.
    Добавьте индексы.
    Сделайте снова запрос в SQL.

    У вас
    where('model', 989)->where('number_mod', '00003454354743643') - оба параметра перебираются перебором, лучше иметь индекс или с fk.
    Для 5 млн записей вы можете сделать индексы, я думаю и все будет летать.
    Ответ написан
    Комментировать
  • Как массово поменять регистр у поля mysql?

    kawabanga
    @kawabanga
    Вы имеете ввиду ПРОПИСНЫЕ буквы заменить на строчные.
    UPDATE TABLE_NAME
    SET field_name = LOWER(field_name)
    Ответ написан
    1 комментарий
  • Как устроены запросы в Tinder?

    kawabanga
    @kawabanga
    Его нужно лайкнуть или пропустить.

    Именно, отправляете на API запрос в нужном формате.

    Как они тогда следующее фото выбирают?

    Рандомно в твоем округе. Ну и имея разные доп алгоритмы.
    Если я правильно понимаю, то там радиусами забирается 500 - 2км ... 20 км и уже на рандом.

    Каждый запрос и каждого фото уникален?

    Нет причин не верить в это. Причем алгоритмы тиндера, если ты не в блэклисте, настроены так, что тебе будет выпадать дубль человека, которого ты не лайкнул, но он лайкнул тебя, но с другим фото.

    Это же невозможно кэшировать или оптимизировать.

    Вот тут я бы поспорил, возможно вы смотрите на сервис как монолит с 3-5 млн пользователей.
    А что, если для функционирования поиска нужен только сервер, который обслуживает определенный округ? Значит оптимизировать возможно. Верно?
    А что если загнать все это в redis с его функциями ГИС - тоже возможно ( там еще бит карты хорошо работают, почитайте документацию и найдете для себя применение)? А это значит что и оптимизировать можно и кэшировать.
    Ответ написан
  • Как быстро вытащить рандомную запись из бд?

    kawabanga
    @kawabanga
    как вариант:

    1) извлекаете count(id) всей таблицы, записываете временно в кэш.
    2) используете rand(1, $count) для получения уникальной записи
    3) получаете по первичному ключу вашу запись.
    Ответ написан
  • Как удалять лишние записи из бд?

    kawabanga
    @kawabanga
    Поставьте прогорание токена на 20-30 минут. этого вполне достаточно. Достаточно записать текущее время в строке.
    А затем, любым удобным способом вычищайте устаревшие данные.
    Либо не удаляйте. как минимум, строка которая записана - это еще и согласие с правилами , и у вас есть дата этого соглашения.
    Ответ написан
    Комментировать
  • Как правильно сделать расписание турнира на php+ mysql?

    kawabanga
    @kawabanga
    А как получится у вас 10 игр у одной команды? Она сама с собой играть будет?

    А вообще, сначала решите логически задачу, mysql - это лишь база данных.
    Если брать логику, то самое простое - представить таблицу, где каждая команда пересекается с каждой, от руки проставить клетки, прикинуть алгоритм, и привести его в исполнение обычным перебором.
    Ответ написан
  • Как сопоставить две строки на вхождение MySql?

    kawabanga
    @kawabanga
    FIND_IN_SET(str,strlist) вам поможет в данном случае.
    Ответ написан
    1 комментарий
  • Как избежать ошибки лишней траты в онлайн магазине?

    kawabanga
    @kawabanga
    1) блокировать кнопку на время выполнения скрипта
    2) валидировать данные на сервере, и если значение больше чем нужно, то отображать ошибку, или приравнивать к максимальному значению.
    Ответ написан
  • Какую базу данных выбрать для мобильного приложения и как правильно организовать загрузку картинок с сжатием?

    kawabanga
    @kawabanga
    1) Какую базу данных выбрать и на каком языке выгоднее создать бакенд (php nodejs).

    Любую, на которой вам будет быстрее и комфортнее работать.
    Иначе говоря, спрашиваете у разработчика мобильного приложения, тот говорит что ему нужен GraphQL, по GraphQL заточен nodejs лучше, и вы будете как на рынке торговаться в пользу лучшего решения.

    2) Как правильно создать авторизацию создать стандартную сесионную или по ключам как node или же лучше прикруть готовую от firebase?

    через токены. если будет нормальный вебсайт еще, то точно не firebase, очень некомфортно. Сессий в API нет.

    3)Как правильно и быстро организовать загрузку картинок на сервер. А-то я написал мини демо на андроиде, так через мобилку мой скрипт пытался загрузить на сервак картинку размером 8 мб которая сделанная на моем телефоне без сжатия. Времени у меня при моем интернете на телефоне заняло почти 5 минут. А мен кажется никто столько ждать не будет.

    Сжимать на клиенте и отправлять сжатое изображение.

    4)Если буду использовать firebase auth какие минусы и подводные камни меня ожидают при реальном использовании клиентами. В принципе думаю этого достаточно так как приложение все равно не большое. Но для меня важные эти вопросы.

    У нас проблема была в синхронизации и написании методов на php бэке. если уже есть система авторизации на бэке, то нет смысла использовать firebase auth.
    Ответ написан
    Комментировать
  • Как разбить выборку из MySQL на периоды?

    kawabanga
    @kawabanga
    Для вас достаточно добавить еще одно поле, либо использовать текущее, если подразумевается задачей, без минут.
    DATE_FORMAT(tstamp, '%Y-%m-%d %H') as dt,

    И проверяйте ваши условия.
    00:00 до 01:00 c 01:01 до 02:00 тут ошибка.
    Ответ написан
    Комментировать
  • MySQL оптимизация размера (INDEX,ENUM)?

    kawabanga
    @kawabanga
    А вы не задумывались что ерунду придумываете c ENUM? сколько размеров экрана существует? только самых распространенных я сразу размеров 20 вспомню. А их может быть очень много.

    Про ENUM очень просто -
    https://dba.stackexchange.com/questions/6962/advan...

    (myisam/innodb), - тоже давно уже решено - почти всегда нужно использовать innodb. так же статей много по этому поводу.

    IP адрес можно в intege хранить IP->INTEGER есть функции, но учтите, что IP6 еще бывают.
    Размер экрана - Varchar(9), чтобы записывать по маске 9999:9999

    Индексы вам не нужны, по крайней мере из текущей задачи.
    Ответ написан
  • Как в live режиме отслеживать изменение в бд?

    kawabanga
    @kawabanga
    В вашем случае это называется Событие, Event, Триггер. Т.е. вы должны запустить определенное событие после того, как случится определенное действие.
    Сокет не следит за изменением БД. Он делает то, что ему скажут, поддерживая RT соединение между клиентом и сервером. ВК не работает на сокетах. ВК работает на longpoll запросах.

    Для PHP есть библиотека для запуска сокетов (одна из немногих) - Ratchet . Запускайте, экспериментируйте с примерами.

    Серверная часть желательно на php, что бы проект можно было установить на обычный хостинг.

    Не припоминаю хостинги, поддерживающие WS. Так что все ручками.

    В общем случае -
    1) Человек оставляет комментарий.
    2) создается событие - разослать пользователям уведомление о новом комментарии. Отправляем его в сокет, и он рассылает пользователям уведомления.

    В вашем случае вместо сложных ws уведомлений, я бы использовал сравнительно простой метод - push уведомления. к примеру onesignal .
    Ответ написан
  • Как правильно сформировать SQL запрос к БД?

    kawabanga
    @kawabanga
    Да по разному можно. Вот к примеру, только учтите, если работает без PDO, то данные нужно вычищать, прежде чем сформировывать подобный запрос.

    $product_id = 51;
    $options = [
        13 => 49,
        14 => 53
    ];
    
    
    $selectSql = 'select relatedoptions_id from tablename ';
    $whereSql = 'where 1   ';
    $whereSql .= ' and product_id=' . $product_id . '  ';
    
    if ($options) {
        $whereSql .= 'and (0 ';
        foreach ($options as $key => $option) {
            $whereSql .= 'or (option_id=' . $key . ' and option_value_id='.$option.')';
        }
        $whereSql .= ')';
    }
    
    $sql = $selectSql.$whereSql;
    echo $sql;
    Ответ написан
  • Как вы структурировали товары из выгрузок с admitad?

    kawabanga
    @kawabanga
    Сталкивался с подобными задачами при парсинге.

    В целом, вам нужно будет пройтись по категориям несколько раз, записав мастер категории в системе своей. Заметьте, если категория "Прессшайбы -> аксессуары". То конечная у вас будет аксессуары. И подобные дубли вам нужно будет исправлять.

    Шаги -
    1) Автоматический маппинг к мастер категориям. Тут я думаю все понятно.
    2) Ручной на один магазин. Можно разбавить полуавтоматическим вводом. Видите категорию, выбираете либо из автоматических предложенных, либо select2 с поиском по словам. Можно за час заполнить порядка 500-1000 категорий. Труд ассистента тут стоит намного меньше. После прохода каждого магазина, нужно делать 3 шаг.
    3) автоматический маппинг по новым категориям в систему.
    Ответ написан
    Комментировать
  • Как получить таблицу из двух таблиц с почти одинаковыми столбцами?

    kawabanga
    @kawabanga
    select category_id, category_name, gender, count(id) from product
    inner join category on category.id=product.category_id 
    group by category_id, gender


    Получится построчно, (категория, пол, кол-во). это самый просто способ получить ваши данные. при сортировке по категории, можно сделать финальную таблицу как у вас.

    Либо если вам нужно именно в таком варианте и плевать на сам запрос, то выглядеть это должно так , но сначала нужно обернуть в таблицу следующий запрос:

    выбрать таблицу с группировками только для М (категория, имя категории, кол-во, 0) где пол=M
    UNION
    выбрать таблицу с группировками только для Ж (категория, имя категории,0, кол-во) где пол=Ж
    Ответ написан
    Комментировать
  • Как удалить полученные данные?

    kawabanga
    @kawabanga
    SELECT FROM `date` where id in (SELECT id FROM `date` GROUP BY title_ru HAVING COUNT(*)>1)
    Ответ написан
  • Как сделать выборку "по одному из каждой группы"?

    kawabanga
    @kawabanga
    Поиграйтесь с ORDER BY FIELD ('')

    select * from pages ORDER BY FIELD (lang,'uk','ru');
    Помню там сложность была, то что отсортированное поле уходит в конец.
    Поэтому есть смысл готовить строку 'uk','ru' заранее, подставляя деофлтный язык в конце.

    https://dba.stackexchange.com/questions/109120/how...
    Ответ написан
    Комментировать
  • Как в SQL сгруппировать по 1 параметру, а второй получить в виде массива/строки?

    kawabanga
    @kawabanga
    SELECT *, COUNT(`city`) AS count, sum('price'), GROUP_CONCAT(`vendor`) FROM `ctable` GROUP BY `city`, `vendor`

    webi.ru/webi_articles/8_14_f.html
    Ответ написан
    Комментировать