查找最近的5個帖子比方說,我們有一個users
表,用戶可以有許多posts
(posts
有user_id
列)。查詢:從不同用戶
我想檢索前5個用戶的帖子,但每個用戶只有一個帖子。所以,最後我想有5個帖子,每個帖子都屬於不同的用戶。我怎麼能在SQL中做到這一點?
查找最近的5個帖子比方說,我們有一個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後,分裝它。
對於「前5位用戶」,你的意思是具有五個最低'user_id's(0-4; 1-5; 1,3,4,5,8;或者他們碰巧是什麼)的用戶? – yoozer8
'選擇'與'連接'和一些獨特/分組魔法。 –
PostgreSQL。排序並不重要。 –