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