我有一個排名用戶列表,並希望選擇前50名。我也想確保一個特定用戶是在這個結果集,即使他們不在前50名。是否有一個明智的方法來做到這一點在一個單一的MySQL查詢?或者我應該檢查特定用戶的結果並在必要時單獨提取他?獲取頂級X用戶,加上特定用戶(如果他們不在頂部X)
謝謝!
我有一個排名用戶列表,並希望選擇前50名。我也想確保一個特定用戶是在這個結果集,即使他們不在前50名。是否有一個明智的方法來做到這一點在一個單一的MySQL查詢?或者我應該檢查特定用戶的結果並在必要時單獨提取他?獲取頂級X用戶,加上特定用戶(如果他們不在頂部X)
謝謝!
如果我理解正確的話,你可以這樣做:
select * from users order by max(rank) desc limit 0, 49
union
select * from users where user = x
這樣你會得到49個頂級用戶再加上你的特定用戶。
不管一個單一的,花哨的SQL查詢可以做,最易於維護的代碼很可能是兩個查詢:
select user from users where id = "fred";
select user from users where id != "fred" order by rank limit 49;
當然「弗雷德」(或任何人)通常會由一個佔位符代替,但具體取決於環境。
declare @topUsers table(
userId int primary key,
username varchar(25)
)
insert into @topUsers
select top 50
userId,
userName
from Users
order by rank desc
insert into @topUsers
select
userID,
userName
from Users
where userID = 1234 --userID of special user
select * from @topUsers
最簡單的解決方案取決於您的要求以及您的數據庫支持的內容。
如果你不介意重複結果的可能性,那麼一個簡單的聯合(如馬里亞諾孔蒂證明)是好的。
否則,你可以,如果你的數據庫支持它這樣做
select distinct <columnlist>
from (select * from users order by max(rank) desc limit 0, 49
union
select * from users where user = x)
。
如果用戶「x」在前49名用戶中,這是否工作? – 2008-09-20 04:03:49
好問題。您可以在頂部選擇 – Mariano 2008-09-20 07:36:34