SQL查询从表中获取记录

时间:2017-08-16 20:02:17

标签: php mysql sql select posts

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是关注兴趣表中某个主题的唯一人时,此查询正常工作。兴趣表包括id,follower_id和(interest_id是体育等主题)。

帖子表包含一个主题列,用户可以关注主题,一旦您按照主题将其插入兴趣表中。现在我正在尝试检索用户发布的帖子,我想要获得的帖子可以是我发布的帖子(帖子中有一个名为user_id的列,这是发布它的用户的ID)或者我发布的主题帖子以下。

这里的问题是,当我运行此查询时,我会收到重复的帖子,因为其他一些用户正在关注相同的主题。

1 个答案:

答案 0 :(得分:1)

如果您没有查询interests中的任何字段,则可能不应该在联接中。将其使用情况转换为inexists条件将消除您的重复项。另外,您应该注意隐式连接(即列出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