2017-02-28 50 views
0

大家好我想知道如何選擇一個範圍的價格,例如: 1000 ... 2000 ... [最小(2100)...最大(4000)] .. 0.5000 ...選擇價格在查詢範圍之間

價格列是books表

我的查詢是:

$sql = "SELECT DISTINCT bk.title AS Title, YEAR(bk.date_released) AS Year, bk.price AS Price, cat.name AS Category, aut.name AS Author FROM books bk 
 

 
     JOIN categories cat 
 
      ON cat.id = bk.category 
 

 
     JOIN books_covers bk_co 
 
      ON bk_co.book_id = bk.id 
 

 
     JOIN covers co 
 
      ON co.id = bk_co.cover_id 
 

 
     JOIN books_authors bk_aut 
 
      ON bk_aut.book_id = bk.id 
 

 
     JOIN authors aut 
 
      ON aut.id = bk_aut.author_id 
 

 
     JOIN books_languages bk_lan 
 
      ON bk_lan.book_id = bk.id 
 

 
     JOIN languages lan 
 
      ON lan.id = bk_lan.lang_id 
 

 
     JOIN books_locations bk_loc 
 
      ON bk_loc.book_id = bk.id 
 

 
     JOIN locations loc 
 
      ON loc.id = bk_loc.location_id 
 

 
      WHERE (bk.price >= 2100 AND bk.price <= 4000) OR (bk.price >= 1000 AND bk.price <= 2000) 
 

 
"; 
 

 
if (isset($_GET['srch_for'])){ 
 

 
     $locations = array(); 
 
     $getters = array(); 
 
     $queries = array(); 
 

 
     foreach($_GET as $key => $value) { 
 
     $temp = is_array($value) ? $value : trim($value); 
 
     if (!empty($temp)) { 
 
      list($key) = explode("-",$key); 
 
      if ($key == 'srch_locations'){ 
 
      array_push($locations,$value); 
 
      } 
 
      if (!in_array($key,$getters)){ 
 
      $getters[$key] = $value; 
 
      } 
 
     } 
 
     } 
 

 
     if (!empty($locations)) { 
 
     $loc_qry = implode(",",$locations); 
 
     } 
 

 
     if(!empty($getters)) { 
 

 
     foreach($getters as $key => $value){ 
 
      ${$key} = $value; 
 
      switch($key) { 
 
      case 'srch_for': 
 
      array_push($queries, "(bk.title LIKE '%$srch_for%' || bk.description LIKE '%$srch_for%' || bk.isbn LIKE '%$srch_for%')"); 
 
      break; 
 
      case 'srch_category': 
 
      array_push($queries, "bk.category = $srch_category"); 
 
      break; 
 
      case 'srch_cover': 
 
      array_push($queries, "bk_co.cover_id = $srch_cover"); 
 
      break; 
 
      case 'srch_author': 
 
      array_push($queries, "bk_aut.author_id = $srch_author"); 
 
      break; 
 
      case 'srch_language': 
 
      array_push($queries, "bk_lan.lang_id = $srch_language"); 
 
      break; 
 
      case 'srch_year': 
 
      array_push($queries, "YEAR(bk.date_released) = $srch_year"); 
 
      break; 
 
      case 'srch_locations': 
 
      array_push($queries, "bk_loc.location_id IN ($loc_qry)"); 
 
      break; 
 
      } 
 
     } 
 
    } 
 
     
 
    if(!empty($queries)) { 
 
     $sql .= " WHERE "; 
 
     $i=1; 
 
     foreach($queries as $query) { 
 
      if ($i < count($queries)) { 
 
       $sql .= $query." AND "; 
 
      }else{ 
 
       $sql .= $query; 
 
      } 
 
      $i++; 
 
     } 
 

 
    } 
 

 
     $sql .= " ORDER BY bk.title ASC"; 
 
    }

我更新的代碼謝謝對於提前

+0

使用'在哪裏X和Y'之間的價格...你不提及你的數據庫管理系統。 –

+0

hello @bard Allred謝謝您的回覆,我需要提一下嗎?我開始在PHP和SQL –

回答

1

您可以使用BETWEEN

WHERE bk.price BETWEEN '5000' AND '8000' 

更多信息here

+0

謝謝你們的答案@eeeteee我嘗試過這之前,但我得到了這個錯誤「你有一個錯誤在你的SQL語法;檢查對應於你的MySQL服務器版本的手冊,爲正確的語法在'WHERE bk.category = 1 ORDER BY bk.title ASC'在第32行'使用' –

+0

這是一個很長的鏡頭,但是你有沒有機會添加兩個'WHERE'?我在問,因爲我沒有看到這個聲明的價格。應該看起來像'WHERE bk.category = 1 AND bk.price BETWEEN 1000 AND 2000' – eeetee

+0

我更新了代碼,請檢查一下,謝謝你的回答:)很多eeeteee :) –

1

添加

WHERE (bk.price >= 2100 AND bk.price <= 4000) 

到您的查詢的末尾加入後,如果你想[民之間的價格範圍(2100)... Max(4000)]

你可以做多個價格範圍使用或

WHERE (bk.price >= 2100 AND bk.price <= 4000) 
OR (bk.price >= 1000 AND bk.price <= 2000) 
+0

它的作品,但是當我搜索一個項目我得到這個錯誤你的SQL語法有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以便在第32行'WHERE bk.category = 1 ORDER BY bk.title ASC'處使用正確的語法。 –

+0

看起來像if(!empty($ queries)){} block已經添加了WHERE子句,所以你不能只添加WHERE(bk.price> = 2100 AND bk.price <= 4000)到$ sql –

+0

我需要做什麼來添加最小和最大輸入請它很長一段時間,我試圖找到一個解決方案,我真的很開心在PHP和SQL –