mysql)

axkjgtzd  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(212)

这个问题在这里已经有答案了

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。
谢谢你的帮助!

p8h8hvxi

p8h8hvxi1#

你需要知道like是为哪个评论而写的。
在这种情况下 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 = ?

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

相关问题