У меня есть поисковая форма, используемая для запроса условий предоставления услуг, которую я назову «положения». Положения могут иметь определенные квалификационные требования в отношении "имеет" и принадлежат многим отношениям, но они могут также не иметь никаких требований вообще. Моя проблема в том, что, когда я исключаю определенные положения на основе конкретного требования, те положения, которые вообще не имеют требований, также исключаются.
Структура таблицы:
provisions
* id
* title
requirements
* id
* title
provisions_requirements
* provision_id
* requirement_id
Предположим, что требование равно:
Canadian Citizenship (id 4)
Это будет представлено в форме, такой как: «Исключить услуги, для которых требуется: канадское гражданство».
Таким образом, исключительная часть запроса будет:
requirements.id NOT IN (4)
Однако тогда я получаю только положения, в которых есть хотя бы одно требование, потому что те положения, в которых нет требований, не включаются в соединение.
Фактический запрос выглядит так:
SELECT DISTINCT `provisions`.id
FROM `provisions`
LEFT OUTER JOIN `provisions_requirements`
ON `provisions_requirements`.provision_id = `provisions`.id
LEFT OUTER JOIN `requirements`
ON `requirements`.id = `provisions_requirements`.requirement_id
WHERE (requirements.id NOT IN ('1'))
LIMIT 0, 10