我想检查dis是大于还是小于或介于某个值之间。看看我的代码,例如,如果我得到了dis A和val 2,那么我将得到dis A,但是如果我得到dis A和val 1,则返回false,因为值1不大于表值1。代码已经可以实现这一点。但是,我不知道如何做到这两者之间,例如,我在我的桌子上做了两排B,小于9和大于4.如何检查我什么时候有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//
?>
&#13;
答案 0 :(得分:1)
试试这个http://www.w3schools.com/sql/sql_between.asp。
lag()
答案 1 :(得分:0)
您不在CASE
子句中使用WHERE
。您可以在CASE
字段列表中使用SELECT
来创建一个计算字段,该字段根据某些if逻辑返回不同的值:
$sql = "SELECT dis,
CASE WHEN val > $min and val < $max THEN 'between' ELSE 'nope' END as 'BetweenOrNot'
FROM $table
WHERE dis = 'A'";
答案 2 :(得分:0)
除非我误解了你的设计意图,否则你正在处理一个次优的数据库结构,导致复杂的查询。
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&#39; BETWEEN
即可查找符合条件的行。请注意,通过仅存储每个dis
值一次来减少表膨胀 - 这些甚至可以是PRIMARY KEYS,这将使一切更快/更好。
现在你可以调用这种查询:
$val=5;
$query="SELECT dis FROM test WHERE dis='A' AND $val BETWEEN `min` AND `max`";
并期望结果集中有一个/不同的dis
。
| dis |
+-------+
| A |
+-------+
您可以使用此Demo Link进行游戏。
另请参阅SELECT * FROM test WHERE 5 BETWEEN min
AND max
将如何返回行A
和B
。