我想展示我所关注的人的所有帖子,包括我自己的帖子。虽然它按预期工作,但我有一个问题:我多次获得相同的帖子。
这是我的问题:
SELECT posts.id, posts.body, posts.posted_at, posts.postimg, posts.likes, users.`username`
FROM users, posts, followers
WHERE (posts.user_id = followers.user_id OR posts.user_id = :userid)
AND users.id = posts.user_id
AND follower_id = :userid
ORDER BY posts.posted_at DESC;
任何人都可以帮助我吗?提前谢谢。
答案 0 :(得分:1)
原因是在这种情况下:
str2double
对于您关注的每个用户,您将获得自己的所有帖子,从而创建自己帖子的副本。
您应该使用UNION(ALL)查询。要避免完整的查询重复,您可以先在子查询中选择所有用户ID:
WHERE (posts.user_id = followers.user_id
OR posts.user_id = :userid)
然后将其与您的表格连接:
SELECT followers.user_id
FROM followers
WHERE followers.follower_id = :userid
UNION ALL SELECT :user_id
答案 1 :(得分:0)
你应该尝试使用:
选择DISTINCT(字段)
从....
哪里......
对于每个相同的结果,DISTINCT只显示一行。
我认为您的查询就像交叉联接一样。
我希望这可以帮到你,对不起我的英语。