4

次の構造を持つデータのテーブルがあります。

id |   likes
1  |     2
2  |     5
3  |     2
4  |     6
5  |     2

#3の隣の行を見つけたい場合は、次を使用できます:

SELECT * FROM table WHERE id >= 3 ORDER BY id

しかし、私がやりたいのは、好きなテーブルごとに注文することです。データをいいね順で並べるとこんな感じ

id |   likes
1  |     2
3  |     2
5  |     2
2  |     5
4  |     6

いいねで並べ替えたときに、特定の ID の前後の行を選択するにはどうすればよいですか? たとえば、ID 5 の場合、結果は行 ID 3 前と行 ID 2 後になります。

4

2 に答える 2

1

いいねが一意の数字である場合、次のように動作するはずです。

前:

SELECT * FROM table WHERE likes < (SELECT likes FROM table WHERE id = ID) ORDER BY likes DESC LIMIT 1

次:

SELECT * FROM table WHERE likes > (SELECT likes FROM table WHERE id = ID) ORDER BY likes ASC LIMIT 1

それらの 1 つを <= または >= に変更して追加することができますWHERE id != ID

于 2013-07-17T11:07:36.787 に答える
0

ちなみに、2 番目のテーブルでは、最初の 2 行の ID が間違っています。

そのはず:

id    likes

 1    2 

 3    2

これはMySQLで機能します:

Select id, likes from (SELECT id, @rownum:=@rownum+1 AS rownum, likes
FROM table u, (SELECT @rownum:=0) r ORDER BY likes) as derived  where
rownum >= 2 and rownum <= 4;

(SELECT id, @rownum:=@rownum+1 AS rownum, likes FROM table u, (SELECT
@rownum:=0) r ORDER BY likes);

最後の部分では、行番号をシミュレートしようとします。これは、MySQL にはありませんが、MSSQL、Oracle などでは使用できます。

于 2013-07-17T11:16:06.323 に答える