Чтобы получить идентификаторы вопросов, используйте предложение HAVING
:
SELECT
questions.id
FROM questions LEFT JOIN topic_mapping ON questions.user_id = topic_mapping.question_id
WHERE topic_id = 49 OR topic_id = 50
GROUP BY questions.id
HAVING COUNT(DISTINCT topic_id) = 2
Результатом этого является список идентификаторов вопросов, которые затем можно объединить с остальной частью вашего запроса на questions.id
, чтобы извлечь оставшиеся столбцы, не включенные в GROUP BY
. Так что все выглядит так:
SELECT
questions.* ,
posts.post,
posts.id AS post_id,
posts.created,
users.id AS user_id,
users.username,
users.rep
FROM questions
JOIN (
/* subquery gets the posts with 2 topics */
SELECT
questions.id
FROM questions LEFT JOIN topic_mapping ON questions.user_id = topic_mapping.question_id
WHERE topic_id = 49 OR topic_id = 50
GROUP BY questions.id
HAVING COUNT(DISTINCT topic_id) = 2
) qtopics ON questions.id = qtopics.id
LEFT JOIN posts ON questions.id = posts.question_id
LEFT JOIN users ON questions.user_id = users.id
LIMIT 0 , 30