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

问题描述 投票:-2回答:1

这个问题在这里已有答案:

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

当在comments_liked表中找到(viewer_id)作为其id的用户正在查看他们的个人资料时,他们应该看到他们喜欢/给予用户的任何评论(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表中不存在。

谢谢你的帮助!

php mysql left-join
1个回答
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,表示这些用户是查询上下文中的作者)。
  • 出于同样的原因,我也使用了列的别名。
© www.soinside.com 2019 - 2024. All rights reserved.