这个查询将返回使用id = 6的用户的信誉:
select reputation from USERS where id=6
而这将在两个用户的信誉返回> =一个使用id = 6 :
(select *
from USERS
where reputation >= (select reputation from USERS where id=6)
order by reputation
limit 2)
那么你可以用信誉<返回两个用户=一个id为6:
(select *
from USERS
where reputation <= (select reputation from USERS where id=6)
order by reputation DESC
limit 2)
当然
,这两个查询将返回与ID的用户= 6的两倍(除非有重复的声誉),以及一个记录与以下用户和前一个用户。您可以使用UNION结合了(工会将去除重复行的ID = 6):
(select *
from USERS
where reputation >= (select reputation from USERS where id=6)
order by reputation
limit 2)
union
(select *
from USERS
where reputation <= (select reputation from USERS where id=6)
order by reputation DESC
limit 2)
这里唯一的问题是,声誉可以重复。你想在这种情况下返回哪些记录?
这个抵消应该是什么意思?它是否会增加x的限制值?它是否会跳过所有条目,直到ID = 33,然后选择下一个3? –
您可以发布表格的行样本,以及预期的查询输出吗?很难理解你的需求与在普通的'WHERE'子句中简单地说'WHERE users.id> = 33'的方式不同,在给ORDER BY添加另一列之后。 –
我不确定它会不会起作用。但是你可以试试看。 'select * from users ORDER BY reputation having reputation> =(选择来自用户的信誉,其中user.id = 33)limit 3' –