这个问题在这里已经有答案了:
sql-从一个表中查找另一个表中不存在的记录(8个答案)
两年前关门了。
我有两张table comments
以及 comments_liked
. 用户( viewer_id
)我喜欢你写的评论( UID
). 注解存储在comments表中,喜欢的注解存储在comments\u liked表中(如所附图像所示)。
**我想做的是:
当用户( viewer_id
)当他们的id(在comments\u liked表中)正在查看他们的配置文件时,他们应该看到他们喜欢的/给用户的任何注解(uid),只有当注解不存在于comments表中uid=uid时
请不要混淆,因为我并不是要显示uid=uid的所有注解。
下面是我用php编写的代码
请注意:如果我们不能说 where comments_liked.uid != comments.uid
因为这将显示comments表中的所有其他值。
$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
table。
谢谢你的帮助!
1条答案
按热度按时间p8h8hvxi1#
你需要知道like是为哪个评论而写的。
在这种情况下
comments_liked
表是关于注解的,所以它不应该(至少不一定)包含uid
但它应该具有comment_id
评论本身。毕竟,如果用户100有五条评论,而用户200只喜欢其中一条评论,那么您只想看到那一条评论,而不是全部五条。
一旦你有了这些,你就可以选择用户喜欢的所有评论,如下所示:
如你所见:
首先,这取决于你改变了模型,所以你知道like是为哪个评论而写的。
然后可以加入内容以获取其内容。
然后可以加入user表以获取注解的作者(您可能也希望显示该作者)。这可以从comment表中使用,因此您不需要在comment表中使用该uid。
我在表格上用了化名。这可以帮助您在查询中获得一些概述,因为别名可以更短(
cl
)或者可以包含一些上下文(authors
,表示这些用户是查询上下文中的作者)。出于同样的原因,我也为该列使用了别名。