【问题标题】:Query: Find most recent 5 posts from distinct users查询:查找来自不同用户的最近 5 个帖子
【发布时间】:2012-08-29 10:31:13
【问题描述】:

假设我们有一个users 表,一个用户可以有多个postspostsuser_id 列)。

我想检索前 5 个用户的帖子,但每个用户只能检索一个帖子。所以,最后我想要 5 个帖子,每个帖子属于不同的用户。如何在 SQL 中做到这一点?

【问题讨论】:

  • “前 5 个用户”是指具有最低 user_ids 的五个用户(0-4;1-5;1,3,4,5,8;或任何他们碰巧)?
  • select 带有 join 和一些独特/分组的魔法。
  • PostgreSQL。顺序无关紧要。

标签: sql postgresql


【解决方案1】:

你应该有两张桌子

Table : users ; Columns : users_id , user_name
Table2: posts ; Columns : post_id , post_description , users_id

现在检索所有用户,每个用户都有一个帖子

SELECT * FROM users as u
LEFT JOIN (SELECT * FROM posts LIMIT 1)  as p on p.users_id = u.users_id
LIMIT 5 ORDER BY ASC

如果您想为每个用户获取最旧的帖子

SELECT * FROM users as u
LEFT JOIN (
    SELECT 
        MIN(post_id) as post_id , 
        post_description , 
        users_id  FROM posts
    )  as p on p.users_id = u.users_id
LIMIT 5 ORDER BY ASC

对于最新的帖子,使用 MAX(post_id) 而不是 MIN(post_id)

【讨论】:

  • 谢谢,最后一个正是我需要的。
【解决方案2】:

也许对你有帮助:

select * 
  from users u
  join posts p on p.idUser = u.id
               and p.id = ( select max(id) from posts where p.id=u.id ) 
 ORDER BY i.id LIMIT 5

【讨论】:

    【解决方案3】:

    这将为您提供最新的五个帖子(假设更高 ID 的帖子“较新”),强制每个结果来自不同的用户。

    SELECT p.user_id, MAX(p.post_id) AS post_id 
    FROM posts AS p
    GROUP BY p.user_id -- get unique users
    ORDER BY p.post_id DESC -- sort results by post_id number, descending
    LIMIT 5
    

    使用此方法,如果需要加载其他用户或发布数据,最好在获得所需的用户ID和发布ID后单独加载。

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多