2017-06-10 166 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

您正在使用DESC是獲取結果下降。你應該使用ASC來提取結果。

例 -

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

EDITED

你需要按降序排列,那麼你需要再次升序排列第一次提取。

例 -

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表WHERE尺寸> 5 ORDER BY大小ASC LIMIT 2)爲R ORDER BY r.Size DESC此外,我太新+1,所以我只能在這裏說謝謝。 –

0

您應該使用ASC,在爲了不DESC BY子句

1

你可以選擇具有尺寸大5作爲一個子查詢中的行,並從結果集的子查詢中選擇前兩排。

查詢

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

SQL Fiddle demo