Выберите продукт из фильтров - PullRequest
1 голос
/ 13 декабря 2011

У меня проблема с запросом:

У меня есть 3 таблицы: продукты (идентификатор, имя) настройки (идентификатор, имя) product_setting (product_id, setting_id)

например: я бы хотел выбрать только те товары, которые вы выбрали, фильтры!

Я делаю это:

SELECT p. *, s.id as setting
FROM Products p
INNER JOIN product_setting p2 ON (p.id = p2.product_id)
INNER JOIN settings s ON (s.id = p2.setting_id)
WHERE s.id IN (1,2)

но я получаю все продукты с идентификатором 'setting' id = 1 ИЛИ id = 2. Как получить только те продукты, которые имеют эти «настройки» (И)?

спасибо !!

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011
SELECT p.*, s.id as setting
FROM Products p
INNER JOIN product_setting p2 ON (p.id = p2.product_id)
INNER JOIN settings s ON (s.id = p2.setting_id)
WHERE s.id IN (1,2)
GROUP BY p.id
HAVING COUNT(*)=2; // size of IN()
0 голосов
/ 13 декабря 2011

Это похоже на убийство, но ...

SELECT p. *, s.id as setting
FROM Products p
INNER JOIN product_setting p2 ON (p.id = p2.product_id)
INNER JOIN settings s ON (s.id = p2.setting_id)
INNER JOIN settings s2 ON (s.id = p2.setting_id)
WHERE 
    s.id = 1
    AND s2.id = 2
...