2012-09-04 58 views
0

我有一個表,像這樣:檢索最新記錄各組

表新聞

Id Name Other_Columns 
------------------------- 
1 A  data 1 
2 A  data 2 
3 A  data 3 
4 B  data 4 
5 B  data 5 
6 C  data 6 

,我需要找回這樣的事情

Group A 
---------- 
data 1 
data 2 
data 3 

Group B 
---------- 
data 4 
data 5 

Group C 
---------- 
data 6 
莫非

別人的幫助我用MySql語句?

+0

是的,這很簡單:'SELECT * FROM yourTable'。 MySQL不適合爲你格式化數據。這是在表示層完成的。 – fancyPants

+0

真的嗎?我以爲我曾經見過這樣的事情,並用mysql – Alex

+0

僅僅因爲你看過它,並不意味着它是最佳實踐。 – fancyPants

回答

0

真的不清楚你實際上想要什麼,但會這樣做嗎?

select "Group A" 
union all 
select Other_Columns from news where name = "A" 
union all 
select "Group B" 
union all 
select Other_Columns from news where name = "B" 
union all 
select "Group C" 
union all 
select Other_Columns from news where name = "C" 
+0

我需要按名稱對所有數據進行分組,然後從每個組獲得5個最新條目 – Alex

0

這很簡單。該查詢會像:

,A組:

SELECT Other_Columns FROM news WHERE Name = 'A'; 

廣場 'B' 和到位的 'A' 'C',讓其他組。

+1

是的,但我需要在一個語句中執行此操作。而且名稱不僅僅是3(A,B,C),它們甚至可以是10或更多。 ;) – Alex

0

應該這樣做:

select asdf.Name, asdf.Other_Columns from (
select 
if(@prev != q.Name, @rownum:=1, @rownum:[email protected]+1) as rownumber, @prev:=q.Name, q.* 
from (
select 
Name, 
Other_Columns 
from 
yourTable yt 
, (select @rownum:=0, @prev:='') r 
order by Id, Name, Other_Columns 
)q 
)asdf 
where asdf.rownumber <= 5 

這將讓你5最新的。如上所述,格式化數據在表示層完成。

+0

謝謝! :)這正是我正在尋找的! – Alex

+0

@亞歷克斯很高興我能幫上忙。本網站上的「最佳做法」是通過點擊答案左側的選項來接受答案。這樣一來,其他人就不會浪費時間,因爲他們看到它已經解決了,而且這是感謝回答者的好方法。 :) – fancyPants