У меня довольно длинный SQL-запрос:
SELECT *, content.contentID AS thisID
FROM content
LEFT JOIN link_keywords ON content.contentID = link_keywords.contentID
LEFT JOIN link_countries ON content.contentID = link_countries.contentID
LEFT JOIN link_sections ON content.contentID = link_sections.contentID
WHERE status = '1' AND typeID = '1'
GROUP BY contentID
ORDER BY creationDate DESC
Я возвращаю набор результатов, что я хотел бы сделать, это показать все результаты, в которых sectionID
(который происходит из соединения link_sections) равен как 3, так и 4. Другими словами, все результаты, которые находятся в оба раздела 3 и 4.
Следующий запрос ничего не возвращает, по-видимому, это потому, что он проверяет одну строку с sectionID
равным 3 и 4. Мне нужен любой content.contentID
с sectionID
равным 3 и 4.
SELECT *, content.contentID AS thisID
FROM content
LEFT JOIN link_keywords ON content.contentID = link_keywords.contentID
LEFT JOIN link_countries ON content.contentID = link_countries.contentID
LEFT JOIN link_sections ON content.contentID = link_sections.contentID
WHERE status = '1' AND typeID = '1' AND (sectionID = '3' AND sectionID = '4')
GROUP BY contentID
ORDER BY creationDate DESC
Вы можете использовать sub-SELECTs:
SELECT *, content.contentID AS thisID
FROM content
LEFT JOIN link_keywords ON content.contentID = link_keywords.contentID
LEFT JOIN link_countries ON content.contentID = link_countries.contentID
LEFT JOIN link_sections ON content.contentID = link_sections.contentID
WHERE status = '1' AND typeID = '1' AND
content.contentID IN (SELECT section3.contentID
FROM link_sections AS section3
WHERE sectionID = 3) AND
content.contentID IN (SELECT section4.contentID
FROM link_sections AS section4
WHERE sectionID = 4)
GROUP BY contentID
ORDER BY creationDate DESC
Попробуйте следующее:
SELECT
*,
content.contentID AS thisID
FROM content
LEFT JOIN link_keywords
ON content.contentID = link_keywords.contentID
LEFT JOIN link_countries
ON content.contentID = link_countries.contentID
LEFT JOIN link_sections
ON content.contentID = link_sections.contentID
WHERE
(SELECT COUNT(contentID) AS counter FROM link_sections s2 WHERE s2.contentID=content.contentID AND (sectionID='3' OR sectionID='4') GROUP BY contentID)=2
AND STATUS = '1'
AND typeID = '1'
AND (sectionID = '3'
OR sectionID = '4')
GROUP BY content.contentID
ORDER BY creationDate DESC;
Что вам нужно сделать, это выбрать строки с sectionID = '3' и пересечь результаты с строками с sectionID = '4'.