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


trying to check value between some number mysql php

我想检查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将返回AB行。