2017-11-23 7 views
0

これは可能かどうかわかりません。そのため、現在はグループからすべてを選択し、結果を配列に入れてスライスしています。しかし、ここでは例のテーブルがあります:MySQL:名前に近い範囲を選択

id - groupid - item 
1 - 1 - red 
2 - 1 - blue 
3 - 1 - green 
4 - 2 - strawberries 
5 - 2 - grapes 
6 - 2 - oranges 
7 - 1 - purple 
8 - 1 - black 
9 - 2 - apples 

など。

にはどうすればアイテムに基づいてグループから3件の結果を得ることができるだろうか?アイテムそのものと同様に、1つ前、1つ後、アルファベット順に表示されます。

だから:

select t.*, max(tr.item) prevItem, min(tl.item) nextItem 
from t 
left join t tl on t.groupid = tl.groupid and t.item < tl.item 
left join t tr on t.groupid = tr.groupid and t.item > tr.item 
group by t.id, t.groupid, t.item 
order by t.groupid, t.item; 

MySQL Fiddle Demo:私はあなたがこのようなクエリを使用することができると思う

2 - blue 
3 - green 
7 - purple 

答えて

0

9 - apples 
5 - grapes 
6 - oranges 

項目が緑色である:

項目がブドウです

0

これは私の知る限り

SELECT * FROM (
    SELECT t1.* 
    FROM things t1 
    INNER JOIN things t2 ON t1.groupid = t2.groupid 
    WHERE t2.item = 'green' and t1.item < 'green' 
    ORDER BY t1.item DESC 
    LIMIT 1 
) A 
UNION ALL 
SELECT * FROM things B WHERE item = 'green' 
UNION ALL 
SELECT * FROM (
    SELECT t1.* 
    FROM things t1 
    INNER JOIN things t2 ON t1.groupid = t2.groupid 
    WHERE t2.item = 'green' and t1.item > 'green' 
    ORDER BY t1.item 
    LIMIT 1 
) C 

その方法を得ることができるよう、あなたがここにすべてのサブクエリで

を、パラメータを変更する必要がありますされては例https://www.db-fiddle.com/f/oCYdeiak1RjKUvNvZM5Eq5/0

です