php mysql双内连接

时间:2011-06-04 20:46:11

标签: php mysql join

所以我有3张桌子

帖子

  • ID
  • POST_ID
  • USER_ID

评论

  • ID
  • POST_ID
  • COMMENT_ID
  • USER_ID
  • 删除

回复

  • ID
  • POST_ID
  • reply_id
  • USER_ID
  • 删除

我正在尝试从post.user_id = x

获取每个帖子的所有评论和回复.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。

3 个答案:

答案 0 :(得分:7)

您错过了模型中的关键关系。你需要在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

答案 1 :(得分:2)

尝试使用左连接而不是内连接,这将确保存在符合WHERE条件的POSTS表中的所有行。

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'

答案 2 :(得分:0)

从我所看到的所有表格中都缺少 post_id 。 ids太多了。 改变你的表格,以便关系明显,然后你可以很容易地提取数据。