如何在一个表中打印数据,如果它不存在于另一个表中(php mysql)

时间:2018-04-16 08:38:19

标签: php mysql left-join

我有两张表commentscomments_liked。用户(viewer_id)可以喜欢(UID)撰写的评论。评论存储在评论表中,喜欢的评论存储在 comments_liked 中(如附图所示)。 enter image description here **我想做什么:

如果在 comments_liked 表中找到(viewer_id)作为其ID的用户正在查看他们的个人资料,他们应该会看到他们喜欢/给予的任何评论user(UID),仅当评论表中不存在评论时,uid = uid

请不要混淆,因为我不想在uid = uid上显示所有评论。

以下是我在php中的代码

请注意:如果我们不能说where comments_liked.uid != comments.uid,那么会在评论表中显示所有其他值。

$query = "
    SELECT * FROM comments_liked

    INNER JOIN comments ON uid = comments.uid

    WHERE uid = ? 
    AND viewer_id = ? 
";

但是我的代码只打印commnets_liked.uid = comments.uid的记录,这与我想要的相反。

所以,如果我是用户1,我需要查看来自comments_liked的记录,其中viewer_id = 1,因为comments表中不存在该记录。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要知道哪个评论是合适的。

在这种情况下,comments_liked表是关于评论的,所以它不应该(至少不一定)包含发布评论的用户的uid,而是它应该有评论本身的comment_id

毕竟,如果用户100有五条评论,而用户200只喜欢其中一条评论,那么您只想看到一条评论,而不是全部五条评论。

完成后,您可以选择用户喜欢的所有评论:

SELECT
  c.comment,
  authors.username AS comment_author
FROM
  comments_likes cl
  INNER JOIN comments c ON c.id = cl.comment_id
  INNER JOIN users authors ON authors.id = c.uid
WHERE
  cl.viewer_id = ?

所以你可以看到:

  • 首先,它取决于您更改模型,因此您知道哪个评论适合。
  • 然后,您可以加入内容以获取其内容。
  • 然后你可以加入用户表来获取评论的作者(你可能也希望显示它)。这可以在评论表中使用,因此您不需要在comment_likes表中包含该uid。
  • 我在表格中使用了别名。这可以帮助您在查询中获得一些概述,因为别名可以更短(cl)或可以包含一些上下文(authors,表明这些用户是查询上下文中的作者)。
  • 出于同样的原因,我也使用了列的别名。