Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在列字段中搜索范围内的值_Mysql_Sql - Fatal编程技术网

Mysql 在列字段中搜索范围内的值

Mysql 在列字段中搜索范围内的值,mysql,sql,Mysql,Sql,我在数据库中有如下表 id | range | price 1 | 11.00-11.99 | 2.78 2 | 12.00-12.99 | 3.65 3 | 13.00-13.99 | 2.90 4 | 14.00-14.99 | 1.56 我必须在range列中搜索值13.65。有没有办法直接在mysql查询中搜索 提前感谢使用子字符串索引分隔范围,并在中间子句中使用 您还可以在左侧(范围5)和右侧(范围5)之间使用,这可能会

我在数据库中有如下表

id  |  range        | price 
1   |  11.00-11.99  | 2.78  
2   |  12.00-12.99  | 3.65  
3   |  13.00-13.99  | 2.90  
4   |  14.00-14.99  | 1.56
我必须在
range
列中搜索值
13.65
。有没有办法直接在mysql查询中搜索


提前感谢

使用
子字符串索引
分隔范围,并在
中间
子句中使用

您还可以在左侧(范围5)和右侧(范围5)之间使用
,这可能会更快。自己测试一下

select * from your_table
where 13.65 between 
SUBSTRING_INDEX(`range`,'-',1) 
 and SUBSTRING_INDEX(`range`,'-',-1);
SUBSTRING\u索引(范围“-”,1)
将在第一个
-


注释:如其他注释所建议的,应考虑重新设计表结构,但如果不可能,则应在<代码>左> <代码>和<代码>右<代码> > <代码> ->代码>上创建“<代码>范围<代码> >列索引。我想让您自己去想怎么做,但这将显著提高查询的性能。

考虑重新定义一个表,其中您的范围有一个最小值和一个最大值。我的意思是,您应该有一个结构,如id、range\u min、range\u max、Price、,所以您可以按字段查询每个值,因为范围内有很多记录,所以没有任何方法在单个字段中搜索。我无法修改在多个区域中使用的现有表,该表的数据类型为范围列?在上述记录中,
13.65
的结果是什么?请注意,此解决方案无法从IDEX中受益。因此,这是缓慢和可怕的-但是,它至少指出了OP可能会着手修复其损坏的设计的方式。我完全同意您在设计方面的观点,但我知道在现有项目上实施并不容易。虽然OP和其他人在设计表时应该考虑到这一点,但当您得到这样的需求时,除了提出一个解决方案之外,没有什么可以做的。在MySQL上不是很确定,但我相信他们可以在
range
列的
left
right
上创建索引,以加快搜索速度。我也会在回答中提到这一点。在MySQL中,函数不能使用索引。@嗯。这太糟糕了。