@rdmd2010

Как присвоить родительскому продукту минимальную цену дочерних продуктов?

У родительских продуктов могут быть несколько дочерних.
Как одним запросом присвоить родительским продуктам минимальную цену одного из дочерних продуктов.

Упрощенное описание полей

В таблице "products" поля
product_id
parent_id

В таблице "prices" поля
product_id
price_id
price

Написал такой запрос, но он берет цену первого дочернего продукта, а мне надо чтобы он выбирал минимальную цену из всех дочерних.

UPDATE #__virtuemart_product_prices AS a

JOIN #__virtuemart_products AS b
ON a.virtuemart_product_id = b.product_parent_id

JOIN #__virtuemart_product_prices AS c
ON b.virtuemart_product_id = c.virtuemart_product_id

SET a.product_price = c.product_price

Заранее спасибо.
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
UPDATE `prices` AS `prc`
  JOIN (
    SELECT `prd`.`parent_id` AS `product_id`, MIN(`prc`.`price`) AS `price`
      FROM `products` AS `prd`
      JOIN `prices` AS `prc` ON `prc`.`product_id` = `prd`.`product_id`
      GROUP BY `prd`.`parent_id`
  ) AS `min` ON `min`.`product_id` = `prc`.`product_id`
  SET `prc`.`price` = `min`.`price`

Запрос обновляет только один уровень вложенности, то есть минимум считается только по непосредственным потомкам.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
UPDATE prices as p set price = (select min(price) from prices ch where ch.parent_id = p.id)
where p.parent_id is null
Ответ написан
Ваш ответ на вопрос

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

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