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

    Ermako
    @Ermako
    Data Scientist
    SET - оператор для операции UDPDATE.
    У Вас, видимо, должно быть что-то такое.
    CREATE TRIGGER `name` AFTER INSERT ON `table`
    FOR EACH ROW
    BEGIN
    INSERT IGNORE INTO `table2`(`val`) VALUES (NEW.`myval`);
    END
    Ответ написан
    Комментировать
  • Существует ли такой тип запросов к БД?

    Ermako
    @Ermako
    Data Scientist
    Ответ написан
    Комментировать
  • Нестандартная выборка данных из 2-х таблиц, как составить?

    Ermako
    @Ermako
    Data Scientist
    Делаем LEFT JOIN и присоединяем только тех, у кого нужный производитель, но не через WHERE, а через условие в JOIN и делаем count по правой таблице. Если никого не нашлось, то там будут только значения NULL, а count(поле) выдает количество not null значений, а не всех.
    SELECT a.category_id AS id, COUNT(b.product_id) AS p_count
    FROM a
    LEFT JOIN b ON a.product_id=b.product_id and b.manufacturer_id = 'Мелкософт'
    GROUP BY id
    Ответ написан
  • Как составить запрос?

    Ermako
    @Ermako
    Data Scientist
    Положим у нас есть таблица clients с полями client_id и service_id.
    Логика: находим всех, у кого есть услуга, делаем джойн и отсеиваем тех, кто под условие джойна не попал.

    select distinct c.client_id
    from clients c
    left join (select client_id
                      from clients
                          where service_id = 5) s on s.client_id = c.client_id
    where s.client_id is null
    Ответ написан
    Комментировать
  • Как сделать множественный UPDATE?

    Ermako
    @Ermako
    Data Scientist
    Сначала создаем таблицу для апдейтов
    update_info с полями id, price. Заполняем ее значениями для обновления - батчем, отдельными insert-ами, в любом порядке.

    Далее обновляем целевую таблицу product через join
    UPDATE products p 
        JOIN update_info ui ON t.id =  ui.id
    SET p.price = ui.price


    Вы можете в течение дня наполнять таблицу для апдейта как некоторую очередь, а после по регламенту обновлять целевую и очищать очередь.
    Ответ написан
    Комментировать
  • Как использовать DISTINCT с LEFT JOIN?

    Ermako
    @Ermako
    Data Scientist
    Тут, конечно, стоило сразу писать, что Вы хотите получить, чтобы не возникало распространенного казуса xyz

    Конкретно тут, если требуется получить одно значение из таблицы scm, можно сделать через группировку

    $all_sales_select = mysql_query('
        SELECT sc.*, wpu.money, scm.value
        FROM sales_catalog sc 
        LEFT JOIN wp_users wpu 
          ON sc.sale_provider_id = wpu.ID 
        LEFT JOIN (select sale_id, max(value) as value
                   from sales_catalog_meta 
                   WHERE type = "image"
                   group by sale_id) scm
          ON sc.sale_id = scm.sale_id
        WHERE sc.sale_provider_id="'.$user_id.'" 
        ORDER BY sc.insert_date, sc.sale_id') or die(mysql_error());


    Либо делать подзапрос в поле, если выборка достаточно маленькая, чтобы не лопатить группировкой всю таблицу.
    Ответ написан
  • Стоит ли разделять таблицу на две (поля для выборки и содержимое)?

    Ermako
    @Ermako
    Data Scientist
    Нет, зачем? Нет никакой проблемы в том, что таблица будет широкой. Разбиение на несколько таблиц имеет смысл, если оно приведет к нормализации данных и уменьшению объема хранимой информации. Кроме того, нет никакой необходимости индексировать поля, которые участвуют в выборке, но не используются для фильтрации данных. Если очень хочется смотреть на узкую таблицу с только необходимыми полями - сделайте view без разбиения исходной таблицы.
    Ответ написан
    8 комментариев