[英]php mysql left join where clause error
使用下表
帖子
注釋
回復
我正在嘗試從每個 post.post_id 和 post.user_id='x' 獲取每條評論和回復,並且評論或回復沒有被刪除(0)
這就是我嘗試過的
SELECT *
FROM posts p
LEFT JOIN comments c ON p.id=c.post_id
LEFT JOIN replies r ON p.id=r.post_id
WHERE p.user_id=$user_id
&& c.deleted='0' && r.deleted='0'
這不起作用...
您需要將已刪除的檢查放入 join 子句中。 這應該這樣做:
SELECT *
FROM posts p
LEFT JOIN comments c ON c.post_id = p.post_id AND NOT c.deleted
LEFT JOIN replies r ON r.post_id = p.post_id AND NOT r.deleted
WHERE p.user_id = $user_id
注意:不確定 c.post_id 是否加入 p.id 或 p.post_id - 根據需要更改 on 子句
帖子可能有評論或沒有評論。 使用LEFT JOIN
而不是INNER JOIN
。
帖子可能有回復,也可能沒有。 在該連接中也使用LEFT JOIN
而不是INNER JOIN
。
當使用LEFT JOIN
時,像WHERE comments.deleted = 0
這樣的條件包含一個字段(來自 LEFT JOIN 中的右表( comments
)),LEFT 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 行(3x4)。 這可能是不想要的。 以下第二次嘗試沒有這樣的問題。
我沒有在表格中看到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 代表發布、評論、回復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.