2

IDを使用してトリックを実行する、一致した行の周囲の行の選択に関して、ここには多くの質問があります。私のテーブルは単語であり、単語を単語順に並べる必要があるため、これは私が必要とするものではありません。

表の例:Word

id    word
1     boing
2     aleluya
3     chimp
4     dinner
5     after
6     zup
7     pop
8     house
9     chain

単語ASCで並べ替えられた「夕食」の3つの周囲の行が欲しいとしましょう。私の結果は次のようになります。

id    word
1     boing
9     chain
3     chimp
4     dinner
8     house
7     pop
6     zup

どのクエリを使用する必要がありますか?私はこれを試しました:

SELECT word FROM `word` t WHERE t.word <> 'dinner' 
ORDER BY abs( t.word - (SELECT t2.word  FROM word t2 WHERE t2.word = 'dinner'))
LIMIT 5

これは明らかに機能していません。

4

2 に答える 2

9
SELECT t.id, t.word FROM word t 
WHERE t.word >= 
(
    SELECT lo.word FROM `word` lo 
    WHERE lo.word <= 'dinner' ORDER BY lo.word DESC LIMIT 3,1
)
ORDER BY t.word ASC LIMIT 0,7
;

SQLフィドルはこちら

于 2012-09-06T05:03:14.680 に答える
2

順序付けられた列セットのRANKを導出してみてください。このようなものが機能します:

SELECT 
   e.id, e.word 
FROM  
   (select id, word, @rownum:=@rownum+1 AS RANK from Word, (select @rownum := 0) r order by word asc) d, -- for getting the rank for 'dinner'
   (select id, word, @num:=@num+1 AS RANK from Word, (select @num := 0) r order by word asc) e -- for getting the rank for the other words
WHERE 
   d.word='dinner' AND 
   e.RANK BETWEEN d.RANK-3 AND d.RANK+3 -- +/- 3 columns;

お役に立てれば!

于 2012-09-06T05:21:52.900 に答える