MySQL - запрос AND для объединенной таблицы - PullRequest
0 голосов
/ 28 ноября 2010

У меня довольно длинный 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

Ответы [ 3 ]

2 голосов
/ 29 ноября 2010

Вы можете использовать подвыборы:

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
1 голос
/ 28 ноября 2010

Попробуйте это:

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;
0 голосов
/ 29 ноября 2010

Что вам нужно сделать, это выбрать строки с sectionID = '3' и пересечь результаты со строками с sectionID = '4'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...