Mysql 你能简化这个问题吗?

Mysql 你能简化这个问题吗?,mysql,sql,Mysql,Sql,我有一张这样结构的桌子: CREATE TABLE IF NOT EXISTS `mydb`.`sizes` ( `id_size` INT NOT NULL , `cm_min` INT NOT NULL , `cm_max` INT NOT NULL , PRIMARY KEY (`id_size`) ) ENGINE = InnoDB; 此查询返回大小5的宽度和高度: select cm_min, cm_max from sizes where id_size = 5

我有一张这样结构的桌子:

CREATE  TABLE IF NOT EXISTS `mydb`.`sizes` (
  `id_size` INT NOT NULL ,
  `cm_min` INT NOT NULL ,
  `cm_max` INT NOT NULL ,
  PRIMARY KEY (`id_size`) )
ENGINE = InnoDB;

此查询返回大小5的宽度和高度:

select cm_min, cm_max from sizes where id_size = 5;
它们是:

45, 56
嗯,我想得到所有在这个范围内有cm_最小值或cm_最大值的尺寸。 我想到这样的事情:

它可以工作,但有些尺寸不在任何范围内。 我是说,如果我有这个:

id_size    cm_min    cm_max
1          56        59
2          63        67
3          70        74
4          76        79
5          83        86
6          60        62
7          12        14
如果我有id_size 6的值,并且执行上一个查询,它将返回选择的0行,并且我希望得到大于或小于此大小的id_size,尽管不严格在值之间。在这种情况下,将返回:

id_size    cm_min    cm_max
1          56        59
2          63        67
或者,例如,如果te id_size 7的值是次值,我需要得到下一个次值,在我的情况下是:

id_size    cm_min    cm_max
1          56        59
或者如果我有更高的值,我需要大小的id,它有第二个更高的值

然后,如果我发布的第一个查询没有任何结果,我会执行以下操作:

它对你有用。所以,我的问题是: 我可以只对一个查询执行相同的操作吗?

我希望我的解释是清楚的,我将感谢任何帮助。
提前感谢。

下面的SQL将帮助您开始,它将返回高于或低于所选id的所有行,例如,此处的id=6

SELECT id_size 
FROM sizes 
WHERE (cm_min < 60 or  cm_min > 62) and
(cm_max < 60 or cm_max > 62);

是的,我已对其进行了修改,并且可以正常工作:。但是再看一遍我的第一篇文章,我已经编辑了它,也许你知道一个更好的解决方案。真的谢谢Minesh,但它返回1和2个ID。id_大小5的值分别为83和86。是最高的,因此它将返回第二个最高值的id。我在第一篇文章中解释过。@Joan你应该注意这个存储过程或函数。好的,Minesh,我来做。你也可以看到这一点:
SELECT id_size , 'lower'
FROM sizes 
WHERE (cm_min < 12 AND cm_max < 12)  
LIMIT 1
UNION
SELECT id_size , 'HIGHER'
FROM sizes 
WHERE (cm_min > 14 AND cm_max > 14)
LIMIT 1