2017-06-10 21 views
-1

ここで苦労しています。私はこのような程度に構成されソートされていない値のMySQLのテーブルを持っている:MySQL:指定された値に最も近い値を持つ行を選択してください。

ID  Size 
----- ----- 
1  12 
2  10 
3  1 
4  0 
5  8 
6  9 
7  6 
8  2 
9  9 
10  4 

は、私は何をしたいのは、サイズ(例えばサイズ= 5)は最終的に次の大きな行(および次の小さなを抽出与えられ、 )。

SELECT * FROM Table WHERE Size > 5 ORDER BY Size DESC LIMIT 2 

をしかし、それは私を与える:

は、私が試した

ID  Size 
----- ----- 
1  12 
2  10 

しかし、私が欲しいのは任意の助けをいただければ幸いです

ID  Size 
----- ----- 
7  6 
5  8 

です。私は違いがある場合は、テーブルにアクセスするためにPHPを使用しています。 ありがとう!

答えて

1

ORDER BYでASC、DESCないを使用する必要があります。昇順で結果をフェッチするASCを使用する必要があります。

例 -

SELECT * FROM Table WHERE Size > 5 ORDER BY Size ASC LIMIT 2 

あなたはまず、あなたが再び昇順で注文する必要が降順にフェッチする必要が

を編集しました。

例 -

SELECT * FROM 
    (SELECT * FROM Table WHERE Size > 5 ORDER BY Size DESC) AS r 
ORDER BY r.Size ASC LIMIT 2 
+0

はい、もちろん!ありがとう!それは正しい行を取得しますが、降順で表示することもできます。あまりにもそれを行う方法はありますか? –

+0

PHPでやりたいのであれば、array_reverseを使うことができますし、mysqlでやりたければ私のudpated答えを見てください。 – shubham715

+0

はい!それは基本的に動作しますが、私はこれをやってしまいました:SELECT * FROM(SELECT * FROM TABLE WHERE Size> 5 ORDER BY ASC LIMIT 2)AS r ORDER BY r.Size DESCまた、だから私はちょうどここに感謝を言う必要があります。 –

0

あなたが降順で結果を取得することをDESCを使用している句

1

あなたはサブクエリとして大きなサイズ5を有する行を選択し、サブクエリの結果セットから最初の2つの行を選択することができます。

クエリ

select t.* from(
    select * from your_table_name 
    where size > 5 
)t 
order by t.size asc limit 2; 

SQL Fiddle demo

関連する問題