@EVOSandru6

Как в mysql вытащить count по результатам выборки с исопльзованием связочных таблиц?

Добрый день,

Есть 3 таблицы -

ps_category(Id_category, active)
ps_category_product(Id_category, id_product, level)
ps_ps_product(Id_product, active)

Было бы неплохо делать неактивной категорию, если ВСЕ связанные товары с ней также упразднены.

Накидал запрос - но это не совссем то, что нужно, куда - то нужно впендюоить COUNT

UPDATE ps_category set ps_category.active = '0' where ps_category.level = 3 AND ps_category.id_category IN
         (SELECT ps_category_product.id_category FROM ps_category_product WHERE id_product IN (
                SELECT ps_product.id_product FROM ps_product WHERE ps_product.active = '0'
               ))";


Помогите пожалуйста!
  • Вопрос задан
  • 143 просмотра
Решения вопроса 3
VladimirAndreev
@VladimirAndreev
php web dev
UPDATE ps_category
SET ps_category.active = '0'
JOIN ps_category_product USING(category_id)
JOIN ps_product USING(id_product)
WHERE SUM(ps_product.active)=0
GROUP BY ps_product.id_product


что-нибудь типа такого.
ну, или два запроса.
Ответ написан
@SharuPoNemnogu
не язык плохой, программисты такие...
UPDATE ps_category pc
SET pc.active = 0
WHERE pc.level = 3 
	AND NOT EXISTS (
		SELECT 1 
		FROM ps_product pp
		INNER JOIN ps_category_product pcp ON pcp.id_product = pp.id_product
		WHERE pcp.id_category = pc.id_category
			AND pp.active = 1
		LIMIT 1
	);
Ответ написан
qonand
@qonand
Software Engineer
Если исходить из логики что категория активна когда хоть один товар в ней активный, тогда Ваш запрос переформировать без использования count, например так:
UPDATE ps_category SET active = '0' WHERE level = 3 AND id NOT IN (
	SELECT DISTINCT(id_category) FROM ps_category_product IN 
		(SELECT id_product FROM ps_product WHERE active = '1')
)


т.е. изменять статус у категорий которые не входят в список активных. Но тут нужно понимать, как часто Вы планируете проводить такие изменения статусов категорий, если при каждом изменении активности товара, тогда стоит продумать какой-то другой вариант обновления т.к. использовать таких объемных запросов на реальных проектов крайне не оптимально.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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