2013-05-22 179 views
0

我試圖從數據庫中搜索產品。產品搜索php mysql

MY DB:

tbl_brand 
----------- 
brand_id Brand_name 
1  Canon 
2  Nikon 

tbl_product 
------------- 
prod_id prod_name             brand_id 
1  Canon PowerShot A810 16MP Point & Shoot Digital Camera  1 
2  Canon Digital Camera PowerShot 8MP Point & Shoot    1 
3  PowerShot 8MP Point & Shoot Digital Camera     1 
4  PowerShot 8MP Point & Shoot Digital       1 

我的關鍵字搜索:

  1. $keyword = 'Camera';
  2. $keyword = 'Digital Camera';
  3. $keyword = 'Canon Digital Camera';
  4. $keyword = 'Canon Camera';

我的查詢

Select * from tbl_product where prod_name like '%$keyword%' 

我獲得前三的關鍵字結果。但對於第4個關鍵字,我會將結果清空。

Canon Camera - 關鍵字與產品名稱不匹配。但所有產品均僅限於佳能品牌,所有產品僅限於相機。

我需要顯示'Canon Camera'關鍵字的所有產品。我是PHP和MySQL的新手。請在此幫助。

+0

這將幫助你:http://stackoverflow.com/questions/3621310/php-sql-select-where-like-search-item-with-multiple-words – Joe

回答

-2
$keywords = str_replace(' ','%',$keywords); 
Select * from tbl_product where prod_name like '%$keyword%' 
0

你根本沒有在數據庫中的'佳能相機':)你的代碼是完全沒問題的。通過此搜索%'Canon Camera'%,您可以在字符串前後獲得所有內容,但您必須在中間準確地輸入字符串'Canon Camera'。

3

使用此: -

$keywords = explode(' ', $keyword); 
$searchTermKeywords = array(); 
foreach ($keywords as $word) 
{ 

$searchTermKeywords[] = "prod_name LIKE '%$word%'"; 

} 

$result= mysql_query("SELECT * FROM tablename WHERE ".implode(' AND ', $searchTermKeywords)."); 

說明: - 在這段代碼中,我使用空間拆分的搜索關鍵詞並存入數組。之後,我將sql字符串添加到數組中。沒有。的元素將取決於用戶輸入的搜索字詞的數量。在功能的mysql_query我很爆的陣列和執行後的樣子(爲「數碼相機」關鍵字): -

SELECT * FROM tablename WHERE prod_name LIKE '%digital%' AND prod_name LIKE '%camera%' 
-2

你可以試試這個...

$keyword = 'Canon Camera'; 
$keys = explode(" ",$keyword); 
$sql = "SELECT * FROM tbl_product WHERE "; 

//$wheresql = "prod_name LIKE '".$keyword."'"; 
$wheresql = "1=2 OR "; 

foreach ($keys as $key) { 
$wheresql .= " OR prod_name LIKE '".$key."' "; 
} 
print_r($sql.$wheresql); 
1
$keywords = explode(' ', $keyword); 
foreach($keywords as $words) { 
$x++ 
if($x == 1) { 
    $searchterm .= "prod_name LIKE %$words%"; 
}else { 
    $searchterm .= " OR prod_name LIKE %$words%"; 
} 
} 
Select * from tbl_product where prod_name like '%$searchterm%'; 

它將搜索ü類型

每個字
6

嘗試這與MATCH .. AGAINST

下面是如何得到它的工作:

  1. 首先確保您的表使用MyISAM存儲引擎。 MySQL FULLTEXT索引僅支持MyISAM表。 (編輯2012年11月1日:的MySQL 5.6推出InnoDB表一個FULLTEXT指數型)

    ALTER TABLE tbl_product ENGINE=MyISAM; 
    
  2. 創建全文索引。

    CREATE FULLTEXT INDEX searchindex ON tbl_product(prod_name); 
    
  3. 搜索它!

    $keyword = mysql_real_escape_string($keyword); 
    $query = mysql_query("SELECT * FROM tbl_product 
        WHERE MATCH(prod_name) AGAINST('$keyword')"); 
    

    請注意,您的MATCH條款在命名列必須是在同一順序那些你在全文索引定義中聲明相同的列。否則它將無法工作。

-1
<?php include "header.php"; ?> 

     <div id="page-wrapper"> 

      <div class="container-fluid"> 

       <!-- Page Heading --> 
       <div class="row"> 
        <div class="col-lg-12"> 
         <?php 
$query = $_GET['query']; 
    $min_length = 1; 
    if(strlen($query) >= $min_length) 
    { 
     $query = htmlspecialchars($query); 
     $query = mysqli_real_escape_string($con, $query); 

    echo "<h4>Your match result(s) for <font color=#B22222>$query</font></h4> 
    <hr>"; 
    //select 2 tables - search 
    $result = mysqli_query($con, "SELECT category_name, image, category_id, datetime, description, category_id FROM category 
    WHERE (`category_name` LIKE '%" .$query. "%') 
    UNION SELECT product_name, image, product_id, datetime, description, category_id FROM products WHERE (`product_name` LIKE '%" .$query. "%') 
    UNION SELECT username, fname, lname, email, contact, user_id FROM users WHERE (`username` LIKE '%" .$query. "%') 
    ") or die(mysqli_error()); 


     if (mysqli_num_rows($result) > 0) 
    { 
      while($info = mysqli_fetch_array($result)) 
    { 
     echo ""; ?> 

     <?php Print "" ?> 
     <div class="row"> 
      <div class="col-md-7"> 
       <a href="#"> 
        <img width="280" height="250" src="<?php echo $info['image']; ?>" alt=""> 
       </a> 
      </div> 
      <div class="col-md-5"> 
       <?php 
     if (strpos($info, '') === true) 

     { Print "<h4><a href='view_cat.php?category_id=".$info['category_id']."'>".$info['category_name']."</a></h4>"; } 

    else if (strpos($query, 'username') === true) 
    { Print "<h4><a href='view_cat.php?category_id=".$info['category_id']."'>".$info['username']."</a></h4>"; } 



       ?> 
       <hr> 
       <h4>Added at: <?php echo date("d-M-Y", strtotime($info['datetime'])); ?></h4> 
       <h4>Description: <?php echo $info['description']; ?></h4> 
      </div> 
     </div> 
     <?php ""; 

      } 

      } 
     else { 
      echo "<p> 
      <img src='../image/alert.png'><br /> 
      <h4>Sorry... No results for $query</h4>"; 
    echo ""; 
     } 
    } 
    else{ 
     echo "<h4>Search empty field. Please input your category name</h4>"; 
    } 
?> 
        </div> 
       </div> 
       <!-- /.row --> 

      </div>`enter code here` 
      <!-- /.container-fluid --> 

     </div> 
     <!-- /#page-wrapper --> 

    </div> 
    <!-- /#wrapper -->`enter code here` 

<?php include "footer.php"; ?> 
+0

有啥問題? –