2016-06-07 2 views
-2

есть 3 таблицыMysql несколько присоединиться запрос со списком идентификаторов

products_to_stores

product_id | store_id 
___________________ 
50   | 1 
50   | 2 
66   | 1 
50   | 1 
111  | 3 
111  | 1 
51   | 1 
69   | 3 
69   | 2 

products_to_categories

product_id | category_id 
____________________ 
50   | 69 
50   | 68 
50   | 40 
51   | 66 
52   | 55 
69   | 41 
111  | 40 
111  | 70 

product_descriptions

product_id | manufacturer_id (parent category id) 
____________________ 
68   | 345 
69   | 233 
70   | 788 
50   | 788 
111  | 788 
51   | 210 
52   | 788 

Как получить список идентификаторов продукта в пределах списка категории IdS 68,40,41,55,66 ... и со списком IdS изготовителя 210,788,233 .... и store_id = 1 в течение одного SQL запроса, чтобы избежать foreach loop с php и избежать дублирования продуктов?

+0

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

+0

я имею в виду те, перечисленные –

ответ

2
SELECT DISTINCT p.product_id FROM products_to_stores p INNER JOIN products_to_categories c ON c.product_id = p.product_id INNER JOIN product_descriptions d ON d.product_id = p.product_id 
WHERE 
manufacturer_id IN (210,788) AND category_id IN (40,44) AND store_id = 1 
+0

спасибо. просто –

0
SELECT descriptions.product_id FROM product_descriptions AS descriptions 
    INNER JOIN products_to_categories AS category ON category.product_id = descriptions.product_id AND category.category_id IN (/* Your categories */) 
    INNER JOIN products_to_stores AS stores ON stores.product_id = descriptions.product_id AND stores.store_id = 1 
WHERE descriptions.manufacturer_id IN (/* .... */) 
GROUP BY descriptions.product_id 
Смежные вопросы