php - 如何在以`-`分隔的单列中将范围保存在DB中的范围之间查询`ranges`中的数据?
问题描述
我有下表ranges
id title range
1 ABC 0-500
2 PQR 501-600
3 XYZ 601-700
PHP 代码
$range_input = "0-550";
$data = DB::select("Select * from ranges where range between $range_input");
预期输出:我预计id 1 and 2
结果在 0-550 之间。
谢谢
解决方案
您的表格设计不佳,范围的下限和上限应存储在单独的列中(稍后会详细介绍)。如果真的坚持当前的设计,您可以使用SUBSTRING_INDEX
来分隔下限和上限:
SELECT *
FROM ranges
WHERE ? < SUBSTRING_INDEX(`range`, '-', -1) AND
? > SUBSTRING_INDEX(`range`, '-', 1)
对于?
占位符,您可以绑定要搜索的范围值,例如0
和550
演示
对于您当前的设计,最好单独存储范围的下限值和上限值,即使用此版本的表:
id title lower upper
1 ABC 0 500
2 PQR 501 600
3 XYZ 601 700
现在您只需要以下简化查询:
SELECT *
FROM ranges
WHERE 0 < upper AND 550 > lower;
推荐阅读
- python-3.x - 从列表中删除多个元素
- ios - Swift:如何为数组中的变量赋值?
- javascript - map函数在useEffect中运行后如何设置值
- c# - 除了作为访问修饰符和序列化字段之外,“公共”的统一功能是什么?
- c++ - 白色方形 SFML
- javascript - NODEJS:从对话框 openDirectory 返回数组数组
- android - Android 主题 - statusBarColor 项目上的“无法解析符号”错误
- swift - 如何使用 TextField 更新全局变量?
- mysql - 实体框架和 MySQL 中的求和错误(Sum)
- python - 通过套接字以原始表示形式写入连续的 numpy 数组