2017-02-28 52 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 –