2015-12-02 75 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聲譽