0

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

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

4

3 回答 3

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)

于 2012-08-28T19:08:59.547 回答
0

也许它会帮助你:

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
于 2012-08-28T19:11:09.337 回答
0

这将为您提供最新的五个帖子(假设更高 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后单独加载。

于 2012-08-28T19:15:01.047 回答