簡體   English   中英

php mysql left join where 子句錯誤

[英]php mysql left join where clause error

使用下表

帖子

  • ID
  • post_id
  • 用戶身份

注釋

  • ID
  • post_id
  • comment_id
  • 用戶身份
  • 已刪除

回復

  • ID
  • post_id
  • 回復ID
  • 用戶身份
  • 已刪除

我正在嘗試從每個 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.textcomment.textreply.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM