SQL 查询从 table 获取记录
SQL queries getting records from table
SELECT posts.id, posts.body, posts.posted_at, posts.likes, posts.dislikes, users.`userName`
FROM users,posts,interests
WHERE (posts.user_id =3
OR interests.follower_id =3 AND posts.topics IN(SELECT interest_id FROM interests WHERE follower_id = 3))
AND users.ID = posts.user_id
AND posts.topics = interests.interest_id
ORDER BY posts.posted_at DESC
当 user_id =3 是唯一感兴趣的关注某个主题的人 table 时,此查询工作正常。兴趣 table 包括 id, follower_id, and (interest_id 是体育等话题).
帖子 table 包含一个主题列,用户可以关注这些主题,一旦您关注了某个主题,我就会将其插入兴趣 table。现在我正在尝试检索用户发布的帖子,我想要获取的帖子可以是我发布的帖子(帖子中有一列名为 user_id 的列是发布它的用户的 id)或帖子我正在关注的主题。
这里的问题是,当我 运行 这个查询时,我得到了重复的帖子,因为其他一些用户正在关注相同的主题。
如果您不查询 interests
中的任何字段,它可能不应该在联接中。将其用法转换为 in
或 exists
条件将消除您的重复项。此外,您应该注意隐式连接(即在 from
子句中列出多个表)被认为是一种不好的做法,您应该改用显式连接:
SELECT posts.id, posts.body, posts.posted_at, posts.likes, posts.dislikes,
users.userName
FROM posts
JOIN users ON users.id = posts.user_id
WHERE posts.user_id = 3 OR
posts.topics IN (SELECT interest_id
FROM interests
WHERE follower_id = 3)
ORDER BY posts.posted_at DESC
SELECT posts.id, posts.body, posts.posted_at, posts.likes, posts.dislikes, users.`userName`
FROM users,posts,interests
WHERE (posts.user_id =3
OR interests.follower_id =3 AND posts.topics IN(SELECT interest_id FROM interests WHERE follower_id = 3))
AND users.ID = posts.user_id
AND posts.topics = interests.interest_id
ORDER BY posts.posted_at DESC
当 user_id =3 是唯一感兴趣的关注某个主题的人 table 时,此查询工作正常。兴趣 table 包括 id, follower_id, and (interest_id 是体育等话题).
帖子 table 包含一个主题列,用户可以关注这些主题,一旦您关注了某个主题,我就会将其插入兴趣 table。现在我正在尝试检索用户发布的帖子,我想要获取的帖子可以是我发布的帖子(帖子中有一列名为 user_id 的列是发布它的用户的 id)或帖子我正在关注的主题。
这里的问题是,当我 运行 这个查询时,我得到了重复的帖子,因为其他一些用户正在关注相同的主题。
如果您不查询 interests
中的任何字段,它可能不应该在联接中。将其用法转换为 in
或 exists
条件将消除您的重复项。此外,您应该注意隐式连接(即在 from
子句中列出多个表)被认为是一种不好的做法,您应该改用显式连接:
SELECT posts.id, posts.body, posts.posted_at, posts.likes, posts.dislikes,
users.userName
FROM posts
JOIN users ON users.id = posts.user_id
WHERE posts.user_id = 3 OR
posts.topics IN (SELECT interest_id
FROM interests
WHERE follower_id = 3)
ORDER BY posts.posted_at DESC