Выбрать лучших пользователей X, а также конкретного пользователя (если они не в топе X) - PullRequest
1 голос
/ 20 сентября 2008

У меня есть список ранжированных пользователей, и я хотел бы выбрать 50 лучших. Я также хочу убедиться, что один конкретный пользователь находится в этом наборе результатов, даже если он не в 50 лучших. способ сделать это в одном запросе MySQL? Или я должен просто проверить результаты для конкретного пользователя и получить его отдельно, если это необходимо?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 20 сентября 2008

Если я правильно понимаю, вы можете сделать:

select * from users order by max(rank) desc limit 0, 49  
union  
select * from users where user = x

Таким образом, вы получаете 49 лучших пользователей плюс ваш конкретный пользователь.

1 голос
/ 20 сентября 2008

Независимо от того, можно ли выполнить один причудливый запрос SQL, наиболее поддерживаемым кодом, вероятно, будут два запроса:

select user from users where id = "fred"; 
select user from users where id != "fred" order by rank limit 49;

Конечно, "fred" (или кто бы то ни было) обычно заменяется заполнителем, но особенности зависят от среды.

0 голосов
/ 20 сентября 2008

Самое простое решение зависит от ваших требований и от того, что поддерживает ваша база данных.

Если вы не возражаете против возможности получения дублированных результатов, тогда простой союз (как продемонстрировал Мариано Конти) подойдет.

В противном случае вы могли бы сделать что-то вроде

select distinct <columnlist>
from (select * from users order by max(rank) desc limit 0, 49 
      union 
      select * from users where user = x)

если ваша база данных это поддерживает.

0 голосов
/ 20 сентября 2008
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...