试图检查一些数字mysql php之间的值

时间:2016-08-09 21:56:37

标签: php mysql

我想检查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;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

答案 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)

除非我误解了你的设计意图,否则你正在处理一个次优的数据库结构,导致复杂的查询。

请考虑this table structure/data

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将如何返回行AB