@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')
)


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

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

Войти через центр авторизации
Похожие вопросы