假设我们有一个users
表,一个用户可以有很多posts
(posts
有user_id
列)。
我想检索前 5 个用户的帖子,但每个用户只能检索一个帖子。所以,最后我想有 5 个帖子,每个帖子属于不同的用户。我怎样才能在 SQL 中做到这一点?
假设我们有一个users
表,一个用户可以有很多posts
(posts
有user_id
列)。
我想检索前 5 个用户的帖子,但每个用户只能检索一个帖子。所以,最后我想有 5 个帖子,每个帖子属于不同的用户。我怎样才能在 SQL 中做到这一点?
你应该有两张桌子
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)
也许它会帮助你:
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
这将为您提供最新的五个帖子(假设更高 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后单独加载。