2016-05-13 35 views
1
的SQL/PHP排名(行號)

我有一張馬匹表和我在馬匹配置文件頁上的表格,我想展示馬匹的全球排名,我的表格看起來像這樣。來自表

id name  first second third 
282 NewBreed  3  1  0 
278 CueCard  1  1  0 
283 TapTapBoom  1  0  0 
286 Boomboom  0  0  0 
285 Hoe   0  0  0 
284 Boombastic  0  0  0 
287 Haha   0  0  0 
288 Boom   0  0  0 
280 Annie   0  1  0 
279 Boutan   0  1  0 
281 Wahay   0  1  0 
289 42r3etgf  0  0  0 

例如,如果我是在馬「TapTapBoom」的配置文件,他的全球排名將是第3 ...如何得到這個數字?我猜我需要在按「First」對錶格排序後得到行號。

SELECT * 
FROM horses 
ORDER BY first 
DESC 
SELECT row_number 
WHERE name = TapTapBoom 

所以在我的PHP我需要輸入馬身份證或姓名,因此我得到了馬全球排名...軍銜是他在臺馬的位置的表已經被排序之後按「第一」按順序排列。

這裏是原來的表:

enter image description here

+0

這是您幫助我們更好地理解問題的地方。什麼是提出全球排名的商業規則?最有可能的是,你可以使用這些規則逃避某種'ORDER BY'。 –

+0

這些馬匹是根據「贏得」的數量排列的 –

+0

@Strawberry編輯是非常甜蜜的(沒有雙關語意圖):-) –

回答

1

由於MySQL沒有內建像其他RDBMS行號功能,你將不得不使用一個變量來實現這一目標:

SELECT @rank:[email protected]+1 AS rank, name, runs 
FROM horses, (SELECT @rank=0) vars 
ORDER BY runs DESC, name 

這將按runs降序排列,如果是平局,則會按照字母順序從小到大排序。

+0

運行是派生的數據,這就是爲什麼我覺得它不是真正相關 - 但如果你喜歡,我可以把它放回去。 – Strawberry

+0

這不起作用。 –

+0

首先在你本地的MySQL工作臺上運行它,看它是否有效。問題在於你的PHP代碼。 –