2013-11-01 17 views
2

匹配的行後,我有users表與它points列。用戶id不是自動增量,而是來自Twitter的用戶ID。選擇行之前和按指定順序

我試圖通過username(所以總是1用戶)選擇的用戶和前選擇10行和後10行。

此外,應該由點訂購,我應該得到的排名選定的用戶。

我使用Laravel 4和雄辯的,但我敢肯定它不能與口才進行。

+-----------+--------------+------------+ 
| id  | username  | vote_count | 
+-----------+--------------+------------+ 
| 123456789 | user1  |  150 | 
| 123456789 | user2  |  101 | 
| 123456789 | user3  |   90 | 
| 123456789 | user4  |   88 | 
| 123456789 | user5  |   70 | 
| 123456789 | user6  |   67 | 
| 123456789 | user7  |   65 | 
| 123456789 | user8  |   55 | 
| 123456789 | user9  |   54 | 
| 123456789 | user10  |   45 | 
| 123456789 | user11  |   44 | 
| 123456789 | user12  |   42 | 
+-----------+--------------+------------+ 

比方說,我想vote_count訂購此表,比選擇user5,並選擇2個用戶是之前和之後在給定的順序。

希望我是清楚這一個

+0

*選擇前10行和後10行*這是什麼意思?你能展示示例數據嗎? –

+0

我編輯了一個問題 –

回答

1

事情是這樣的:

SQLFiddle demo

select * from 

(
select * from 
(
select * from t where vote_count<= 
         (select vote_count 
         from t 
         where username ='user5') 

ORDER BY vote_count desc 
LIMIT 3 
) as T1 
UNION 
select * from 
(
select * from t where vote_count> 
         (select vote_count 
         from t 
         where username ='user5') 

ORDER BY vote_count ASC 
LIMIT 2 
) as T2 
) as T3 ORDER BY VOTE_COUNT DESC 
+0

這似乎工作正常。是否有可能跟蹤行索引? –

0

你可以使用union

(SELECT id, vote_count 
FROM `table` 
WHERE id > 123456789 
LIMIT 10) 
UNION 
(SELECT id, vote_count 
FROM `table` 
WHERE id <= 123456789 
LIMIT 10) 
ORDER BY vote_count 
-1

您可以檢查SQL FIDDLE
select * from ((select A.vote_count,A.username from t A join t B on A.vote_count<B.vote_count where B.username='user5' order by A.vote_count DESC limit 2) UNION (select A.vote_count,A.username from t A join t B on A.vote_count>=B.vote_count where B.username='user5' order by A.vote_count limit 3)) as T order by vote_count desc