Подсчитать строки в выборке, запарился

ustasby

ninja cs-cart
продолжаю тупить

Код:
SELECT count(DISTINCT p.goods_id, fe.f_id) as cnt, fe.f_id FROM goods AS p INNER JOIN 
catalog_product_filter_eav AS fe ON p.goods_id = fe.p_id WHERE p.cat_id='10'  GROUP BY fe.f_id

выводит количество товаров в каждом фильтре (cnt - количество товаров с атрибутом, f_id -id атрибута)


это таблица catalog_product_filter_eav

При выборе атрибута я сокращаю список выводимых товаров
Код:
SELECT * FROM goods as p INNER JOIN catalog_product_filter_eav AS fe ON p.goods_id = fe.p_id 
WHERE p.cat_id='10' AND fe.f_id = '10'
и соответственно мы видим только тот товар, который имеет выбранный атрибут, но и этот товар имеет свои атрибуты, и что бы их вывести нужно повторить первый запрос, исключив выбранный атрибут и посчитать количество товаров у каждого атрибута, но, я не знаю как.
Код:
SELECT count(DISTINCT p.goods_id, fe.f_id) as cnt, fe.f_id FROM goods AS p INNER JOIN 
catalog_product_filter_eav AS fe ON p.goods_id = fe.p_id WHERE p.cat_id='10' and fe.f_id <> 10 GROUP BY fe.f_id

Этот запрос исключает атрибут №10 из списка, но другие атрибуты тоже остались, а должны остаться только 7 и 8 с количеством 1. Помогайте.
 

fixxxer

К.О.
Партнер клуба
Если у тебя была проблема и ты ее стал решать с помощью EAV, то тепрь у тебя две проблемы. =)

Я туплю, или начало темы пролюбилось?
 

ustasby

ninja cs-cart
вот код который решает эту проблему
Код:
SELECT count(DISTINCT p.goods_id, fe.f_id) as cnt, fe.f_id FROM ew_goods AS p  
  INNER JOIN ew_catalog_product_filter_eav AS fe ON p.goods_id = fe.p_id
  INNER JOIN ew_catalog_product_filter_eav AS fe0 ON fe0.p_id = p.goods_id
  WHERE  fe.f_id NOT IN (10) and p.cat_id='10' and fe0.f_id = 10
  GROUP BY fe.f_id
может это не лучший вариант, но как еще то можно?
 

ustasby

ninja cs-cart
вот что говорит EXPLAIN q1.PNG, может не париться дальше, вроде как шустро все
 

ustasby

ninja cs-cart
спс, там != до 20 шт, IN (1,2,..22) проще

в итоге получилось как на картинке, если интересно, поделюсь

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

Вложения

  • 13,3 KB Просмотры: 9
Сверху