2015-12-02 45 views
-1

我想执行一个查询,该查询在整个结果集中排序,但是针对特定行(基于列值)的偏移量。在MySQL中使用WHERE子句偏移量LIMIT

基本上是:

SELECT * FROM users 
ORDER BY reputation 
LIMIT 3 OFFSET (WHERE users.id = 6)-1 

有什么办法来进行这样的查询?

对于这样一个表:

USERS 
id reputation 
1 33 
2 34 
3 40 
4 53 
5 45 
6 44 

应该返回

id reputation 
3 40 
6 44 
5 45 

所以,我越来越有ID = 6的用户,这两个用户的口碑最接近的量(一个更高和更低)。

+0

这个抵消应该是什么意思?它是否会增加x的限制值?它是否会跳过所有条目,直到ID = 33,然后选择下一个3? –

+1

您可以发布表格的行样本,以及预期的查询输出吗?很难理解你的需求与在普通的'WHERE'子句中简单地说'WHERE users.id> = 33'的方式不同,在给ORDER BY添加另一列之后。 –

+2

我不确定它会不会起作用。但是你可以试试看。 'select * from users ORDER BY reputation having reputation> =(选择来自用户的信誉,其中user.id = 33)limit 3' –

回答

1

这个查询将返回使用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) 

这里唯一的问题是,声誉可以重复。你想在这种情况下返回哪些记录?

0

假设你正在考虑users.id = 33偏移鳞次栉比,您可以通过users.id LIMIT 3做你想做的给予如下─

SELECT * FROM(SELECT什么* FROM用户 订单OFFSET 32)选项卡 ORDER BY声誉