MySQL Select: Получить основные записи по нескольким прикрепленным записям?

0

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

ВЫБЕРИТЕ * ИЗ СТРАНИЦ, ГДЕ В PAGE_FILTERS существует прикрепленная запись, и эта запись имеет FilterTypeID из 22 И еще одна прикрепленная запись существует в PAGE_FILTERS для того же идентификатора страницы, и эта запись имеет идентификатор типа фильтра 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, мой запрос должен возвращать Page ID 1 и 3. Page 2 не выбирается с 22 совпадений, но нет записи, соответствующей FilterTypeID 27.

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

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

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

Теги:

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню