2017-01-29 44 views
1

我想實現多選複選框價格過濾器,目前我有4個複選框:MySQL查詢與多個參數不工作

1.free 
2.$0-$30 
3.$30-$100 
4.$100+ 

我的PHP代碼。

<input type="checkbox" name = "price[]" <[email protected]$price_check?> class="filters" value="free">Free</label> 
<input type="checkbox" name = "price[]" <[email protected]$price_check?> class="filters" value="affordable-price">0 - 30$ 
<input type="checkbox" name = "price[]" <[email protected]$price_check?> class="filters" value="medium-price">30-100$</label> 
<input type="checkbox" name = "price[]" <[email protected]$price_check?> class="filters" value="high-price">100$+</label> 


if(isset($_GET['price']) && $_GET['price']!="") 
      { 
    $query = "SELECT c.course_id,c.course_title,c.course_url,c.course_thumbnail_url,p.course_provider_name,c.course_category,p.course_provider_icon,c.course_rating,c.course_price from course_catalog_table c inner join course_providers_table p on c.course_provider_id = p.course_provider_id "; 
      if(in_array('free',$_GET['price'])) 
      { 
       $query .= "AND c.course_price = 0 "; 
      } 
      if(in_array('affordable-price', $_GET['price'])) 
      { 
       $query .= "AND c.course_price between 0 and 30 "; 
      } 
      if(in_array('medium-price', $_GET['price'])) 
      { 
       $query .= "AND c.course_price between 30 and 100 "; 
      } 
      if(in_array('high-price', $_GET['price'])) 
      { 
       $query .= "AND c.course_price > 100 "; 
      } 
      } 

主要問題: 我的查詢工作只有一個複選框,如果用戶選擇多於一個複選框,查詢不返回任何結果,我想打印查詢,並在phpMyAdmin,且行執行被返回,所以現在我知道我的查詢存在問題,但無法找出哪部分引發錯誤。

下面是MySQL數據庫查詢時所選擇的所有複選框:

SELECT 
    c.course_id, 
    c.course_title, 
    c.course_url, 
    c.course_thumbnail_url, 
    p.course_provider_name, 
    c.course_category, 
    p.course_provider_icon, 
    c.course_rating, 
    c.course_price 
FROM 
    course_catalog_table c 
     INNER JOIN 
    course_providers_table p ON c.course_provider_id = p.course_provider_id 
     AND c.course_price = 0 
     AND c.course_price BETWEEN 0 AND 30 
     AND c.course_price BETWEEN 30 AND 100 
     AND c.course_price > 100 

回答

0

在你的情況下,MySQL不會引發任何錯誤,因爲生成的查詢是有效的。

問題在於查詢的邏輯,如果你檢查多個複選框,查詢基本上要求價格是例如。介於30到100之間的0到30之間的,這總是假的。

您應該構建如下查詢: [SELECTION STUFF] AND (c.course_price = 0 OR c.course_price between 0 and 30)並使用OR來連接各種範圍規格。

此外,正如Muzamil所述,您應該在範圍選擇邏輯中使用WHERE前的第一個範圍語句前分開JOIN ON條件。

+0

你是對的或條件現在正在工作我無法進行新的查詢,假設我的查詢是'query = select part'現在我想在選中的複選框的基礎上附加或代碼,如果所有複選框都選中,查詢將像'和(c.course_price = 0或(c.course_price在0和30之間)或(c.course_price在30和100之間)或(c.course_price> 100))''但我應該如何將它們分別追加到根據選定的複選框進行查詢 – parvez

0

我認爲問題出在查詢部分在這裏

on c.course_provider_id = p.course_provider_id AND c.course_price = 0 

您需要添加「WHERE」 p.course_provider_id前後第一「和」運算符。

新的查詢應該像

SELECT c.course_id,c.course_title,c.course_url,c.course_thumbnail_url,p.course_provider_name,c.course_category,p.course_provider_icon,c.course_rating,c.course_price from course_catalog_table c inner join course_providers_table p on c.course_provider_id = p.course_provider_id WHERE c.course_price = 0 AND c.course_price between 0 and 30 AND c.course_price between 30 and 100 AND c.course_price > 100 

並且在邏輯多了一個問題,檢查出更多的時間。

AND c.course_price = 0 
     AND c.course_price BETWEEN 0 AND 30 
     AND c.course_price BETWEEN 30 AND 100 
     AND c.course_price > 100 

以上所有情況如何都是正確的?我實際上並不知道你想達到什麼目的。我認爲你應該使用「或」運算符或使用一個條件「c.course_price> 0」

讓我知道它是否沒有工作。並請發送錯誤也謝謝。

+0

您是對的或條件正在工作現在我無法進行新的查詢,假設我的查詢是查詢=現在選擇部分我想在所選複選框的基礎上附加或代碼,如果所有複選框都選中剩餘的查詢將是和(c.course_price = 0或(c.course_price在0和30之間)或(c.course_price在30和100之間)或(c。course_price> 100))但是我應該如何根據選定的複選框在查詢中單獨添加它們 – parvez

+0

如果數組長度大於或等於1,則可以使用檢查數組的長度添加「where」和其他邏輯將保持原樣。 –