我想检查dis是大于还是小于或介于一个值之间。看看我的代码,例如,如果我得到了一个dis a和val 2,那么我就会得到dis a,但是如果我得到了dis a和val 1,那么就会返回false因为值1不大于表val 1。我的代码已经可以实现这一点。但是,我不知道怎么做,例如,我在表中有两行B,小于9大于4。如何检查当我有dis B和val是7,它是4和9之间,并返回dis B,请帮忙。如果需要,我可以修改表的结构。
<?php
dis val op
A 1 greater
B 9 less
B 4 greater
D 4 less
SELECT dis
FROM $table
WHERE dis = 'A' AND
CASE WHEN op = 'greater' THEN val < $val ELSE val > $val END//
?>
试试这个http://www.w3schools.com/sql/sql_between.asp。
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
不能在WHERE
子句中使用CASE
。您在SELECT
字段列表中使用CASE
来创建一个计算字段,该字段根据某些if-logic返回不同的值:
$sql = "SELECT dis,
CASE WHEN val > $min and val < $max THEN 'between' ELSE 'nope' END as 'BetweenOrNot'
FROM $table
WHERE dis = 'A'";
除非我误解了你的设计意图,否则你正在处理一个次优的数据库结构,这会导致复杂的查询。
请考虑这个表结构/数据:
CREATE TABLE `test` (
`dis` varchar(10),
`min` int(3) UNSIGNED NOT NULL DEFAULT 0, // assuming you can assign an arbitrary min
`max` int(3) UNSIGNED NOT NULL DEFAULT 100 // assuming you can assign an arbitrary max
);
INSERT INTO `test` (dis,`min`) VALUES ('A',1);
INSERT INTO `test` VALUES ('B',4,9);
INSERT INTO `test` (dis,`max`) VALUES ('D',4);
这将提供如下的数据表:(SELECT * FROM test
)
| dis | min | max |
+-------+-------+-------+
| A | 1 | 100 |
| B | 4 | 9 |
| D | 0 | 4 |
+-------+-------+-------+
在这个设置中,您可以简单地调用sql的BETWEEN
来查找符合条件的行。请注意,通过只存储每个dis
值一次来减少表的膨胀——这些甚至可以是PRIMARY KEYS,这将使一切更快/更好。
现在你可以调用这种查询:
$val=5;
$query="SELECT dis FROM test WHERE dis='A' AND $val BETWEEN `min` AND `max`";
并期望在结果集中有一个单独的/不同的dis
。
| dis |
+-------+
| A |
+-------+
你可以试试这个演示链接。
参见SELECT * FROM test WHERE 5 BETWEEN min
AND max
将返回A
和B
行。