2012-08-28 30 views
0

查找最近的5個帖子比方說,我們有一個users表,用戶可以有許多postspostsuser_id列)。查詢:從不同用戶

我想檢索前5個用戶的帖子,但每個用戶只有一個帖子。所以,最後我想有5個帖子,每個帖子都屬於不同的用戶。我怎麼能在SQL中做到這一點?

+0

對於「前5位用戶」,你的意思是具有五個最低'user_id's(0-4; 1-5; 1,3,4,5,8;或者他們碰巧是什麼)的用戶? – yoozer8

+0

'選擇'與'連接'和一些獨特/分組魔法。 –

+0

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)

+0

謝謝,最後一個正是我所需要的。 –

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 
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後,分裝它。