簡體   English   中英

PHP MySQL 雙內連接

[英]PHP MySQL double inner join

我有三張桌子:

帖子

  • ID
  • post_id
  • 用戶身份

注釋

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

回復

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

我正在嘗試使用post.user_id=x從每個post.post_id獲取所有評論和回復。

我試過了:

    SELECT *
    FROM posts AS p
    INNER JOIN comments as c
    ON c.comment_id=p.post_id
    INNER JOIN replies as r
    ON r.reply_id=p.post_id
    WHERE
    p.user_id='x'

返回0 ...


解決方案是

SELECT *
FROM POSTS A
LEFT JOIN COMMENTS B ON A.POST_ID=B.COMMENT_ID
LEFT JOIN REPLIES C ON A.POST_ID=C.REPLY_ID
WHERE A.USER_ID='X'

因此,如果我在評論回復表中添加了已刪除的列,我如何檢查我收到的評論或回復是否未被刪除?

我嘗試在A.USER_ID='X' && B.deleted='0' && C.deleted='0'之后添加

但它返回 0。

您在 model 中缺少關鍵關系。 您需要在 post_id 的回復和評論中有一列,然后加入 post_id 上的表。

進行此更改后,您的查詢將如下所示:

SELECT c.*, r.* 
FROM posts p
INNER JOIN comments c ON p.id=c.post_id
INNER JOIN replies r ON p.id=r.post_id
WHERE p.user_id=$user_id

嘗試使用左連接而不是內連接。 這將確保 POSTS 表中與 WHERE 條件匹配的所有行都存在。

SELECT *
FROM POSTS A
LEFT JOIN COMMENTS B ON A.POST_ID=B.COMMENT_ID
LEFT JOIN REPLIES C ON A.POST_ID=C.REPLY_ID
WHERE A.USER_ID='X'

據我所知,所有表中都缺少post_id 身份證太多了。

更改您的表格,使關系變得明顯,然后您可以很容易地提取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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