我有一个具有这种结构的表:
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_min或cm_max在此范围之间的所有大小。 我买了这样的东西:
http://sqlfiddle.com/#!2/83e93/51
它有效,但有些尺寸不在任何范围之间。 我的意思是,如果我有这个:
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。
然后,如果我发布的第一个查询没有任何结果,我这样做: http://sqlfiddle.com/#!2/83e93/32/0
它适用于。所以,我的问题是: 我只能使用一个查询执行相同操作吗?
我希望我的解释清楚,我会感激任何帮助。 提前谢谢。
答案 0 :(得分:1)
下面的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);
<强> SqlFiddle Demo 强>
更新 - 示例
下面我提供了更接近你需要的例子:
如果您需要所有记录,请删除LIMIT 1
,更低和更高
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