我有一个排名用户列表,并希望选择前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