2013-05-19 237 views
-1

可以說我在表中有以下信息。 -1意味着無限MySQL查詢不返回預期結果

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,SMS = 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

有在聲明中沒有哪里哪里是應該拉7.50行作爲數據低於250

但是實際效果我得到的是它將返回所有3行。有什麼建議麼?

+0

表現出更多的代碼......你在哪裏設置$價格,$ smsunlim等 –

回答

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)"); 

i T將修復它

編輯K20:需要$ minquery是在括號

+0

似乎並沒有解決它:(更新問題以反映建議。 – K20GH

+0

那麼你只是在你的邏輯有問題,想想你真的需要什麼,以及如何代表這個問題 – Dima

+0

嗯,我知道這就像它看着最低的數字是什麼,並從那裏向上拉。例如,有一行具有100分鐘或更多(7.50)的行,因此它選擇該行,而不是繼續查詢。這更像是一個SQL問題,就像我直接運行該查詢一樣,我得到的結果相同。 – K20GH