2016-03-04 78 views
1

有沒有辦法按順序返回結果?MySQL:返回結果及其順序

樣品:運行在quiz表以下查詢:

select q.category_id, q.quiz_id, concat('Quiz ',q.name) name 
from quiz q 
where q.category_id = 11 
order by q.category_id ASC 
limit 2 
offset 2; 

quiz(結構):

+-------------+---------+-------+ 
| category_id | quiz_id | name | 
+-------------+---------+-------+ 
| 10   | 10  | math | 
| 11   | 10  | sport | => Quiz Sport 1 
| 11   | 11  | sport | => Quiz Sport 2 
| 12   | 10  | Geo. | 
| 11   | 15  | sport | => Quiz Sport 3 
| 11   | 12  | sport | => Quiz Sport 4 
| 10   | 17  | math | 
| 11   | 20  | sport | => Quiz Sport 5 
| 11   | 22  | sport | => Quiz Sport 6 
| 10   | 19  | math | 
+-------------+---------+-------+ 

回報:

+-------------+---------+------------+ 
| category_id | quiz_id | name  | 
+-------------+---------+------------+ 
| 11   | 15  | Quiz sport | 
| 11   | 12  | Quiz sport | 
+-------------+---------+------------+ 

http://sqlfiddle.com/#!9/110752/2

有沒有辦法與測驗編號順序返回結果,就像這樣:

+-------------+---------+--------------+ 
| category_id | quiz_id | name   | 
+-------------+---------+--------------+ 
| 11   | 15  | Quiz sport 3 | 
| 11   | 12  | Quiz sport 4 | 
+-------------+---------+--------------+ 
+2

你需要有另一場'爲了by'確定正確的順序。 Sql存儲無序 - 所以你將無法保證結果,除非你可以通過另一個字段進行排序。 – sgeddes

+2

在MySql以外的任何地方,這都會更容易**,因爲由於某些原因,MySql沒有窗口函數,即使它們已經超過10年的ANSI標準的一部分。使用窗口函數,這是一個簡單的'row_number()'調用,它在Postgresql,Oracle,Sql Server,DB2,sybase以及我能想到的其他任何東西中都支持,但不支持mysql。 –

+1

這個「測驗」表沒有主鍵? –

回答

2

你需要建立一個行號來做到這一點。這樣做意味着您需要一個獨特的字段order by以確保結果的順序。你可以在mysql中使用user-defined variables得到行號。這裏有一個例子由quiz_id重新排序:

select * 
from (select q.category_id, q.quiz_id, @rn := @rn + 1, concat('Quiz ',q.name, @rn) name 
    from quiz q, (select @rn := 0) t 
    where q.category_id = 11 
    order by q.category_id ASC, q.quiz_id) t 
order by category_id ASC, quiz_id 
limit 2 
offset 2; 
0

你可以通過你的主鍵順序,如果你有一個如

select q.category_id, q.quiz_id, concat('Quiz ',q.name) name 
from quiz q 
where q.category_id = 11 
order by q.id, q.category_id ASC 
limit 2 
offset 2; 

如果你不「T我建議你添加一個主用something like this

ALTER TABLE quiz ADD id INT PRIMARY KEY AUTO_INCREMENT; 

它不PRIMARY如果由於某些原因不適合您的工作。你也可以使用上述語句添加一個rank列,這也是auto_increment

喜歡的東西:

ALTER TABLE quiz ADD rank INT AUTO_INCREMENT; 

(然後運行第一個查詢)

0

我發現了一個類似的問題,幫助我得到你的問題的答案:
(感謝@OMG小馬)LINK(請閱讀他的回答,以獲得對該問題的更多理解)

假設您要依次計算問答次數:
以下是我的回答中的SQLFiddle link

基本上,你要計算條目的數量,並在列中顯示它。