2

列のあるテーブルがusersありpointsます。Useridは自動インクリメントではなく、Twitter のユーザー ID です。

私はusername(常に1人のユーザーで)ユーザーを選択し、その前に10行、その後に10行を選択しようとしています。

また、ポイント順に並べて、選択したユーザーのランキングを取得する必要があります。

私は Laravel 4 と Eloquent を使用していますが、Eloquent ではできないと確信しています。

+-----------+--------------+------------+
| 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 |
+-----------+--------------+------------+

このテーブルを で並べ替えたいとしましょう。指定された順序でその前後にある 2 人のユーザーをvote_count選択して選択します。user5

これではっきりしていることを願っています

4

3 に答える 3

1

このようなもの :

SQLFiddle デモ

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
于 2013-11-01T08:05:10.863 に答える
0

ユニオンを使用できます

 (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  
于 2013-11-01T07:59:04.880 に答える
-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

于 2013-11-01T08:17:03.540 に答える