gpt4 book ai didi

mysql - 查询链接 4 个表

转载 作者:行者123 更新时间:2023-11-29 06:22:51 24 4
gpt4 key购买 nike

我目前有4张 table :

用户:

  • 用户 ID (PK)
  • 姓名
  • 姓名
  • 图片

帖子:

  • 报告 ID (PK)
  • 用户名
  • 职位
  • 描述
  • 图片

评论:

  • 评论 ID (PK)
  • 用户名
  • 帖子ID

用户订阅:

  • ID (PK)
  • 用户名
  • 帖子ID
  • 已读

我需要检索用户订阅的所有帖子的所有评论详细信息(有可用评论的地方)。此查询用于填充应用程序中的我的事件 提要页面。

当用户发布帖子时,他们订阅了该帖子,当用户对帖子发表评论时,他们订阅了该帖子。因此,查询中 WHERE 的“AND”部分的原因是为了确保有人对用户订阅的帖子发表了评论。因此,如果还没有人评论,作者不应该收到关于他们写的帖子的回复。所以想法是用户 a 将收到类似“用户 b 对标题为 xxx 的帖子 c 发表评论”的回复。

我的查询的问题是我没有从 userSubscriptions 表收到正确的 isRead Val。

我的尝试:

$ReportDetails_Query = "SELECT Posts.ReportID, Posts.Title AS postTitle, Posts.Pic as postPic, Posts.Description as postDescription,
Posts.datePosted AS postDatePosted, Posts.photoWidth as postPhotoWidth, posts.photoHeight as postPhotoHeight, Users.FName as authorFname,
Users.SName as authorSname, Users.Pic as postAuthorPic, Users.UserID As authorID, userSubscriptions.isRead
FROM UserSubscriptions
INNER JOIN Posts ON userSubscriptions.PostID = Posts.ReportID
INNER JOIN Users ON Posts.UserID = Users.UserID
WHERE Posts.ReportID IN
(SELECT PostID FROM UserSubscriptions WHERE UserID = ?)
AND
(SELECT COUNT(CommentID)
FROM Comments WHERE UserID <> ?
AND Comments.ReportID = Posts.ReportID) > 0
GROUP BY Posts.ReportID
LIMIT ?,10";

SQL fiddle :http://sqlfiddle.com/#!9/9aa16

fiddle 返回 1 行,但我在 phpmyadmin 中的查询返回了两个正确的行,但 isRead 值不正确。

当传入 userID 36 时,我得到了两个正确的行,但每行中的 isRead col 是错误的,因此在连接到 userSubscriptions 表时出现了问题

注意:当我在查询中包含 userSubscriptions.ID 时,我可以看到我得到 4 和 16,它们是不正确的行,它们的 isRead 值为 1。但是对于所有 atm 帖子,用户 36 的 isRead 值为 0。

编辑:我修改了查询,它似乎在工作。如果有人看到它有问题,请指出。我在第一个内部连接中添加了一个 and :

SELECT Posts.ReportID, Posts.Title AS postTitle, Posts.Pic as postPic, Posts.Description as postDescription,
Posts.datePosted AS postDatePosted, Posts.photoWidth as postPhotoWidth, posts.photoHeight as postPhotoHeight, Users.FName as authorFname,
Users.SName as authorSname, Users.Pic as postAuthorPic, Users.UserID As authorID, userSubscriptions.isRead
FROM UserSubscriptions
INNER JOIN Posts ON userSubscriptions.PostID = Posts.ReportID and userSubscriptions.UserID = 36
INNER JOIN Users ON Posts.UserID = Users.UserID
WHERE Posts.ReportID IN
(SELECT PostID FROM UserSubscriptions WHERE UserID = ?)
AND
(SELECT COUNT(CommentID)
FROM Comments WHERE UserID <> ?
AND Comments.ReportID = Posts.ReportID) > 0
GROUP BY Posts.ReportID
LIMIT ?,10

最佳答案

也许您混淆了外键。

INNER JOIN Posts ON userSubscriptions.PostID = Posts.ReportID

为此,PostID 必须是 Posts.ReportID 的外键

查看 UserSubscriptions.PostID 的 FOREIGN KEY 定义,找出它链接到哪个表。

关于mysql - 查询链接 4 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32583553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com