请看下面我的表格。当我有一个 value 和 cat 时,我想检查 id。如果我有 cat a
和值 3
,那么我将得到 id 1
,但是如果我得到 cat a
和值 1
,然后返回 false,因为值 1
不大于 2
。问题是更大的符号在表内。我想不出在 mysql 查询上执行此操作的方法,请帮忙。如果需要,我可以更改表值结构。
table
id cat value
1 a greater than 2
2 b less than 2
3 c less than 2
4 d greater than 5
$val = 3;
SELECT id FROM my_table WHERE value=$val and cat = a
最佳答案
table
id cat lbound ubound
1 a 2 2147483647 (Assuming signed int)
2 b -2147483648 2
3 c -2147483648 2
4 d 5 2147483647
$cat = 'a';
$val = 3;
SELECT id
FROM my_table
WHERE cat = $cat
AND lbound <= $val -- If you use nulls instead of default extreme values,
AND ubound >= $val -- then these two bounds comparisons will be more complicated
ORDER BY lbound DESC LIMIT 1 -- if overlapping ranges are possible
在设计方面,我更喜欢默认的“无限制”值使用空值,但使用 OR 的表达式如 AND (lbound IS NULL OR lbound <= $val)
,或类似 IFNULL(lbound,-2147483648) <= $val
的功能倾向于取消索引使用的资格。
关于php - 尝试在大于和小于 mysql 表 php 内部时创建查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38858248/