我想獲得與國家相同行數據的第一行顯示的行(有一行命名爲國家)。例如,如果有5個結果,其中2個具有「英格蘭」國家,他們應該排在第一位。我試過MySQL - 列表結果首先按相同的值排序?
$mycountry = "england";
mysql_query("SELECT * FROM members where basresvar='yes' ORDER BY country DESC limit 10")
但它不按照我的意願對結果進行排序。什麼是正確的方法來做到這一點?
我想獲得與國家相同行數據的第一行顯示的行(有一行命名爲國家)。例如,如果有5個結果,其中2個具有「英格蘭」國家,他們應該排在第一位。我試過MySQL - 列表結果首先按相同的值排序?
$mycountry = "england";
mysql_query("SELECT * FROM members where basresvar='yes' ORDER BY country DESC limit 10")
但它不按照我的意願對結果進行排序。什麼是正確的方法來做到這一點?
使用
ORDER BY country = "England" DESC, country
當比較結果爲真,則該值爲1
;當它爲假時,值爲0
。所以當你按照這個比較順序排列的時候,這個國家等於英格蘭的那些排在第一位。
添加第二個排序條件使所有其餘國家按照英格蘭字母順序排序。
你可以這樣寫查詢:
select *
from
members
where
basresvar='yes'
order by
case when country='england' then 1 else 2 end
limit 10
的case...when
語句將返回1當國家=「英格蘭」和2否則的話,因爲我們被這句話訂購此將把具有行國家='英格蘭'在頂部,其他人在底部。
你可能會解釋什麼「案例」/它是如何工作的......但很好的答案! –
好奇;這個簡短的語法類似於fthiella的答案嗎?看起來是這麼回事。 (有趣)。 –
是的,它非常相似,它只是利用了MySQL將數字表示爲布爾值的事實,所以您不必使用CASE來拼出它。 – Barmar
最明智的答案。一個問題,如果我只是想先排序相同的國家,只使用ORDER BY country =「England」DESC將完成這項工作,對嗎? – user198989