@nata32

Как сформировать запрос к БД?

Добрый день, помогите пожалуйста с запросом к базе, я пока новичок в рнр, а с базой на начальном уровне ((((
Есть таблица product, в ней есть id - айди товара, sku - арикул, price- цена, quantity - количество, status- 0 или 1 (выключен, включен)
Есть 10 поставщиков, у них могут быть одинаковые товары с одинаковыми артикулами, разные по цене и количеству.
Надо сформировать запрос, что бы все одинаковые товары были выключены кроме одного у которого минимальная цена и количество не 0, то есть если есть 3 товара с одним артикулом и с ценами 100, 120, 140 р, с количеством 0, 10, 20, то включен должен быть тот у которого цена 120 и количество 10, а остальные 2 выключены.
Насколько я понимаю, надо в запросе сгруппировать по артикулу, узнать минимальную цену, а дальше тупик (((
Спасибо за помощь.
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для MySQL 8.0 и выше
WITH `cte` (`id`, `row`) AS (
   SELECT `id`, ROW_NUMBER() OVER `win`
     FROM `product`
     WINDOW `win` AS (PARTITION BY `sku` ORDER BY `quantity` = 0, `price`)
 )
 UPDATE `cte`
   JOIN `product` USING (`id`)
   SET `product`.`status` = (`cte`.`row` = 1)

Для старых версий MySQL
UPDATE `product` AS `p` 
  LEFT JOIN (
    SELECT `t`.`sku`, MIN(`p`.`id`) AS `id`
      FROM (
        SELECT `sku`, MIN(`price`) AS `price`
          FROM `product`
          WHERE `quantity` != 0
          GROUP BY `sku`
      ) AS `t`
      JOIN `product` AS `p`
        ON `p`.`sku` = `t`.`sku` AND `p`.`price` = `t`.`price`
      WHERE `p`.`quantity` != 0
      GROUP BY `t`.`sku`
  ) AS `i` ON `i`.`id` = `p`.`id`
  SET `p`.`status` = (`i`.`id` IS NOT NULL);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы