-1

假设我在表格中有以下信息。-1 表示无限

Price    Minutes    SMS    Data
7.50     200        -1     250
10       250        -1     1000
12       250        -1     -1

在我的表单上,我有许多字段和一个复选框,如果你想要无限的东西,所以我有一个 SQL 查询,它有一些变量,具体取决于复选框是否被勾选,如下所示:

//check to see if minutes is set as unlimited. if they are, set sms as -1
   if ($minunlim=="on"){
    $minquery = "minutes = -1";
    $minutes = "Unlimited";
   } else {
        $minutes = $_GET["minutes"];
    $minquery = "minutes >= '$minutes' OR minutes = -1";
   }

//check to see if sms is set as unlimited. if they are, set sms as -1
if ($smsunlim=="on"){
    $smsquery = "sms = -1";
    $sms = "Unlimited";
} else {
    $sms = $_GET["sms"];
    $smsquery = "sms >= '$sms' OR sms = -1";
}

//check to see if sms is set as unlimited. if they are, set sms as -1
if ($dataunlim=="on"){
    $dataquery = "data = -1";
    $data = "Unlimited";
} else {
    $data = $_GET["data"];
    $dataquery = "data >= '$data' OR data = -1";
}

//run query
$getprices = $this->db->query("SELECT * FROM gg_Crates WHERE 
    price <= '$price' AND $minquery
    AND ($smsquery)
    AND ($dataquery)");

所以我使用的标准是价格 = 36,分钟 = 100,短信 = 200,数据 = 300,我的期望是在这种情况下,唯一返回的项目将是价格为 10 和 12 的行(因为数据低于 300在第一行)

它输出的查询是:

SELECT * FROM gg_Crates WHERE price <= '36' AND minutes >= '100' OR minutes = -1 AND (sms >= '200' OR sms = -1) AND (data >= '300' OR data = -1)

在我的脑海里读到

选择价格低于 36、分钟数大于或等于 100 或等于 -1 的所有内容。并且 SMS 大于或等于 200 或等于 -1。并且数据大于等于300或者等于-1

由于数据低于 250,该语句中没有应该拉 7.50 行的位置。

但是我得到的实际结果是它返回了所有 3 行。有什么建议么?

4

1 回答 1

1

你的逻辑可能有问题,

这个

$smsquery = "sms >= '$sms' OR sms = -1"

和这个:

data >= '$data' OR data = -1

是一个有问题的表示,将您的查询更改为:

$getprices = $this->db->query("SELECT * FROM gg_Crates WHERE 
price <= '$price' AND ($minquery)
AND ($smsquery)
AND ($dataquery)");

它会修复它

编辑 K20:$minquery 需要放在括号中

于 2013-05-19T09:10:59.037 回答