2010-10-13 1 views
0

Не знаю, как спросить это, так что имеет смысл, но я пытаюсь сделать запрос, как:MySQL Выберите: Получить основные записи по нескольким прикрепленным записям?

SELECT * FROM WHERE СТРАНИЦ присоединенной запись существует в PAGE_FILTERS и что запись имеет FilterTypeID 22 и другие прикрепленную запись существует в PAGE_FILTERS для одной и той же страницы ID и что запись имеет тип фильтра идентификатор 27.

у меня есть структура вроде этого:

 
PAGES table 
PageID  PageName 
1   Page 1 
2   Page 2 
3   Page 3 

PAGE_FILTERS table 
PageID  FilterTypeID   FilterValueID 
1     22     1 
1     27     2 
2     22     0 
2     24     1 
3     22     1 
3     27     1 
3     28     2 

Таким образом, данные FilterTypeID от 22 до 27 лет, мой запрос должен return PageID 1 и 3. Страница 2 не выбирается с 22 совпадений, но нет записи m atching FilterTypeID 27.

Page 3 совпадает, хотя есть дополнительный фильтр.

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

Я не против изменения структуры базы данных, если это имеет смысл, но на каждой странице не может быть ни одного, ни одного или множества фильтров.

ответ

0
SELECT p.* 
FROM pages p 
JOIN PAGE_FILTERS pf 
ON p.PageID = pf.PageID 
    AND pf.FilterTypeID IN (22,27) 
GROUP BY p.PageID 
HAVING COUNT(DISTINCT pf.FilterTypeID) = 2 
Смежные вопросы