2016-06-20 6 views
1

Привет У меня есть трудности с одним запросом, если кто-то может помочь было бы здоровоSql категории запросов

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

Category-70 (2) <- Product-57, Product-56 
Category-64 (2) <- Product-57, Product-50 
Category-61 (1) <- Product-56 
Category-73 (1) <- Product-50 

Так что это легко. У меня есть запрос, как эта:

http://sqlfiddle.com/#!9/4f188/1

Так что я хотел бы передать категорию иде на мой запрос, и получить отсчеты на основе этого идентификаторы, что-то вроде этого, если я прохожу идентификатор категории 70 результата имеет чтобы быть

Category-70 (2) <- Product-57, Product-56 
Category-64 (1) <- Product-57, [Product-50 is gone because is not in cateogry id 70] 
Category-61 (0) 
Category-73 (0) 

Если я передать идентификатор категории 70 и 64 результат должен быть

Category-70 (1) <- Product-57, [Product-56 is gone because is not in category 70 and 64] 
Category-64 (1) <- Product-57 
Category-61 (0) [Product-56 is gone, because is not in category 70 and 64 ] 
Category-73 (0) [Product-50 is gone because is not in category 70 and 64] 

или если я дать в качестве категории ID параметра 73 результат должен быть

Category-70 (0) [products are not counted because they are not in 73] 
Category-64 (1) <- Product-50 
Category-61 (0) [products are not counted because they are not in 73] 
Category-73 (1) <- Product-50 

Это даже возможно :), Ty за любую помощь ...

ответ

1

+1 для примера SQL скрипку, очень полезно.

Я считаю, что это должно решить вашу проблему (добавлено к югу выбрать для ваших Join)

SELECT Concat('Category-',c.category_id), 
count(DISTINCT p2c.product_id) as products 
FROM category c 
LEFT JOIN product_to_category p2c 
    ON (c.category_id = p2c.category_id AND p2c.product_id) AND p2c.product_id in 
    (select product_id from product_to_category where category_id = @input) 
LEFT JOIN category_path cp ON (cp.category_id = c.category_id AND cp.path_id = c.category_id)  
WHERE 
cp.level <= 2 
GROUP BY c.category_id 
ORDER BY c.sort_order 
+0

приветствий, которые помогли TY – Alex