假设我们有users
表,用户可以有多个posts
(posts
有user_id
列。
我想检索前5个用户的帖子,但每个用户只有一个帖子。所以,最后我想要有5个帖子,每个帖子属于不同的用户。我怎么能在SQL中做到这一点?
答案 0 :(得分: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)
答案 1 :(得分: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
答案 2 :(得分: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和post id后单独加载它。