一个帖子可以有意见或没有。使用LEFT JOIN
而不是INNER JOIN
。
帖子可能有答复或不答复。在该连接中使用LEFT JOIN
而不是INNER JOIN
。
当使用LEFT JOIN
,像WHERE comments.deleted = 0
的条件包括场(从左侧右表(comments
)JOIN),所述左连接被取消。所以,我们应该把这个条件放在ON
条款中,而不是在WHERE
中。
SELECT *
FROM posts p
LEFT JOIN comments c
ON p.post_id = c.post_id
AND c.deleted = 0
LEFT JOIN replies r
ON p.post_id = r.post_id
AND r.deleted = 0
WHERE p.user_id = $user_id
思路更加清晰,上面会显示这个问题介绍了什么,但例说,4条评论和3篇回复,12列将返回(3×4)。这可能不是想要的。以下第二次尝试没有这样的问题。
我没有在表格中看到post.text
或comment.text
或reply.text
,但无论如何,您都会明白。如果不合适,您可以删除3 text
行。
(SELECT p.post_id AS post_id
, 0 AS type
, p.post_id AS id
, p.text AS text
FROM posts p
WHERE p.user_id = $user_id
)
UNION ALL
(SELECT p.post_id AS post_id
, 1 AS type
, c.comment_id AS id
, c.text AS text
FROM posts p
JOIN comments c
ON p.post_id = c.post_id
WHERE p.user_id = $user_id
AND c.deleted = 0
)
UNION ALL
(SELECT p.post_id AS post_id
, 2 AS type
, r.reply_id AS id
, r.text AS text
FROM posts p
JOIN replies r
ON p.post_id = r.post_id
WHERE p.user_id = $user_id
AND r.deleted = 0
)
ORDER BY post_id
, post_type
, id
0,1,2代表帖子,评论,回复。
尝试使用'和'而不是''&& – 2011-06-04 22:34:56
如果'删除= 0'意味着删除评论,那么这将显示所有删除帖子 - 删除评论组合。 – 2011-06-04 22:36:38
返回0,这不是结果。 编辑:我怎么能让它做我想要的? – fxuser 2011-06-04 22:37:11