Mysql 最快和/或最简单的方法是什么?
我有以下表格和查询:Mysql 最快和/或最简单的方法是什么?,mysql,sql,database,Mysql,Sql,Database,我有以下表格和查询: CREATE TABLE IF NOT EXISTS `sizes` ( `id_size` INT NOT NULL , `cm_min` INT NOT NULL , `cm_max` INT NOT NULL , PRIMARY KEY (`id_size`) ) ENGINE = InnoDB; insert into sizes values (1, 56, 59), (2, 63,
CREATE TABLE IF NOT EXISTS `sizes` (
`id_size` INT NOT NULL ,
`cm_min` INT NOT NULL ,
`cm_max` INT NOT NULL ,
PRIMARY KEY (`id_size`) )
ENGINE = InnoDB;
insert into sizes values
(1, 56, 59),
(2, 63, 67),
(3, 70, 74),
(4, 76, 79),
(5, 83, 86),
(6, 60, 62),
(7, 12, 14);
SELECT * FROM sizes
WHERE cm_min >= 13 AND cm_min <= 66 OR
cm_max >= 13 AND cm_max <= 66
AND cm_min =
(SELECT min(cm_max) FROM sizes
WHERE (cm_min >= 13 AND cm_min <= 66) OR
(cm_max >= 13 AND cm_max <= 66))
UNION
SELECT * FROM sizes
WHERE cm_min >= 13 AND cm_min <= 66 OR
cm_max >= 13 AND cm_max <= 66
AND cm_min =
(SELECT min(cm_min) FROM sizes
WHERE (cm_min >= 13 AND cm_min <= 66) OR
(cm_max >= 13 AND cm_max <= 66))
ORDER BY cm_max ASC;
下面是一个值为12和66的示例,如您所见。
我需要在此查询中添加以下两个条件:
如果引入值的范围是所有值中最小的
表中,查询仅返回具有
最小值。例如:如果我有这些值第9条和第10条
结果将是id_大小7,因为它是具有较小
数字
如果引入值的范围是所有值中最大的
表中,查询仅返回具有
最大值。例如:如果我有值112和113,则
结果将是id_大小5,因为它是具有较大
数字
您知道如何将上述条件添加到我的查询中吗?
我可以简化它吗?这应该可以解决问题。请注意,顺序是有效的,@v1必须是最小范围,@v2必须是最大范围
SET @v1=112, @v2=113;
SELECT *
FROM sizes
WHERE (
cm_min BETWEEN @v1 and @v2
AND
cm_max BETWEEN @v1 and @v2
)
OR
cm_min = (
SELECT MIN(cm_min)
FROM sizes
WHERE (@v1+@v2) <= (cm_min + cm_max)
)
UNION
SELECT *
FROM sizes
WHERE (
cm_min BETWEEN @v1 and @v2
OR
cm_max BETWEEN @v1 and @v2
)
OR
cm_max = (
SELECT MAX(cm_max)
FROM sizes
WHERE (@v1+@v2) >= (cm_min + cm_max)
)
ORDER BY cm_max ASC;
;
由于缺少括号,您的比较似乎有误。我想你需要像…和。。。或和而不是当前格式。。。和或和还有…谢谢,伙计,我已经修改过了。再次查看第一篇帖子我已经修改了一些东西,也许你现在可以帮助我了。哦,上帝!很好!真的谢谢。顺便问一下,这是更快的方法吗?不是。上面的查询不会针对搜索进行优化。您是如何获得搜索值的?u可能需要考虑有一个大小实体关系来规范这个搜索。@ JoaNead不知道您的表大小和索引,并运行一个解释选择…很难说是否有更快的方法。我将对你的问题进行编辑,使其更全面,然后你可以在后面添加更多关于附加条件的信息。好吧,这是对算法的更改-你希望v2比v1具有更大的权重。现在没时间了,星期一我得考虑一下。