【问题标题】:search value within range in column fields在列字段的范围内搜索值
【发布时间】:2017-05-24 08:16:17
【问题描述】:

我在数据库中有如下表

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查询中搜索

提前致谢

【问题讨论】:

  • 考虑重新设计一个表格,其中您的范围有一个最小值和一个最大值
  • 我的意思是你应该有一个像id、range_min、range_max、Price这样的结构,这样你就可以自己查询每个值
  • 没有办法在单个字段中搜索,因为范围内有很多记录。我无法修改在多个区域中使用的现有表
  • 范围列的数据类型是什么?
  • 以上记录中13.65的结果是什么?

标签: mysql sql


【解决方案1】:

使用substring_index 分隔范围并在between 子句中使用。

您也可以使用between left(range,5) and right(range,5),这样会更快。自己测试一下。

select * from your_table
where 13.65 between 
SUBSTRING_INDEX(`range`,'-',1) 
 and SUBSTRING_INDEX(`range`,'-',-1);

SUBSTRING_INDEX(range,'-',1) 将在第一个 -

之前为您提供价值

注意:正如其他人在评论中所建议的那样,您应该考虑重新设计表结构,但如果这是不可能的,您应该在 left-range 列上创建索引。我会让你弄清楚如何做到这一点,但这会显着提高查询的性能。

【讨论】:

  • 请注意,此解决方案无法从 idex 中受益。因此,它是缓慢而可怕的——但是,它至少指出了 OP 可能会修复其损坏的设计的一种方式。
  • 在设计部分我完全同意你的看法,但我知道在已经存在的项目上实施并不容易。虽然 OP 和其他人在设计表格时应该考虑到这一点,但当您遇到这样的要求时,除了想出一个解决方案外,无能为力。对 MySQL 不太确定,但我相信他们可以在 range 列的 leftright 上创建索引,以便更快地搜索。也会在答案中提到这一点。
  • 在MySQL中,函数不能使用索引。
  • @Strawberry 嗯。真可惜。
猜你喜欢
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
相关资源
最近更新 更多