2015-11-08 2 views
0

Я столкнулся с головоломкой; не знаю почему - это потому, что это поздно, или я просто застрял. Моя цель - создать фильтр на веб-странице, поэтому я пытаюсь понять это.Выбор элементов, которые имеют одинаковые значения в одном столбце

У меня есть список продуктов, которые я храню с фильтрами в справочной таблице product_filter.

Структура:

id | product_id | filter1_id | filter2_id 
1 | 1  | 2   |  1 <--- 
2 | 1  | 4   |  3 
3 | 1  | 5   |  1 
4 | 2  | 2   |  1 <--- 
5 | 2  | 3   |  1 
6 | 3  | 2   |  1 <--- 
7 | 3  | 3   |  4 

мне нужно предоставить список товаров (например, 1,2,3) и получить только те комбинации фильтров, которые являются одинаковыми для всех выбранных идентификаторов продукта. Таким образом, результат должен быть

filter1_id | filter2_id 
    2  |  1  

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

+0

попробуйте использовать 'count (filter1_id)'> 1 в where clause ... –

+0

Андрей, любая радость от решения? – wwkudu

ответ

0

Вот один подход, который вы могли бы попробовать:

select filter1_id, filter2_id 
from product_filter 
group by filter1_id, filter2_id 
    having count(*)=(
    select count(distinct product_id) 
    from product_filter 
) 

Это будет возвращать только список, когда сочетание filter1_id и filter2_id существует каждый product_id. (Fiddle here.) Это то, что вам нужно? Не упоминаете ли вы, что должно быть возвращено, если нет никакой комбинации, которая существует для всех данных product_id, - пустой набор результатов?

Это не самосознание (или даже тонна их;)), но это все равно будет довольно дорого, как я себе представляю.

Смежные вопросы