【问题标题】:SQL queries getting records from tableSQL查询从表中获取记录
【发布时间】:2018-01-25 02:22:50
【问题描述】:
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)或主题的帖子我下列的。

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

【问题讨论】:

    标签: php mysql sql select posts


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多