假设我在表格中有以下信息。-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 行。有什么建议么?