2014-12-13 234 views
0

因此,我目前正在創建一個搜索引擎剛出來的興趣,並好奇,如果我能夠查詢不僅僅是在MySQL數據庫中的關鍵字列。目前,我可以搜索某些東西,並根據我的「關鍵字」列獲得結果。但是,如果我所搜索的字詞或短語不在關鍵字列中,而是在標題列或描述列中找到,它是否有可能顯示,因爲它在這些列中發現了它?mysql php搜索引擎查詢多列

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <title>Search Engine - Search</title> 
</head> 
<body> 

    <h2>Search Engine</h2> 
    <form action='./search.php' method='get'> 
     <input type='text' name='k' size='50' value='<?php echo $_GET['k']; ?>' /> 
     <input type='submit' value='Search'> 
    </form> 
    <hr /> 
    <?php 
     $k = $_GET['k']; 
     $terms = explode(" ", $k); 
     $query = "SELECT * FROM databeast WHERE "; 

     foreach ($terms as $each){ 
      $i++; 
      if ($i == 1) 
       $query .= "keywords LIKE '%$each%' "; 
      else 
       $query .= "OR keywords LIKE '%$each%' "; 
     } 

     //connect 
     mysql_connect("localhost", "username", "password"); 
     mysql_select_db("fapster") or die(mysql_error()); 

     $query = mysql_query($query); 
     $numrows = mysql_num_rows($query); 
     if ($numrows > 0) { 
      while ($row = mysql_fetch_assoc($query)){ 
       $url = $row['url']; 
       $title = $row['title']; 
       $keywords = $row['keywords']; 

       echo "<h1><a href='$url'>$title</a></h1> 
       $keywords<br /><br />"; 
      } 
     } 

    ?> 
</body> 
</html> 

在此先感謝

+0

先分配i = 0。開始時它沒有價值 – hakiko 2014-12-13 12:45:26

+0

@hakiko它有一個值「$ i ++;」 – BubblewrapBeast 2014-12-13 12:49:23

回答

0

我建議你檢查到MySQL全文搜索。 http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

這允許您在查詢中搜索多個關鍵字。此外,全文爲您提供了將單詞真正理解爲「自然語言」(所以它涉及「停用詞」,「複數」和「詞幹」)的好處。請參閱http://dev.mysql.com/doc/refman/5.0/en/fulltext-query-expansion.html

不要拋棄「Like」邏輯。 MySQL全文搜索有一些煩人的事情 - 所以你可能仍然想要使用該邏輯。他們是:

  1. 搜索哪些返回「太多」(%50或更大)的結果什麼也沒有返回。不是搜索者通常期望的,對嗎?通常人們希望它像谷歌那樣工作。上話
  2. 搜索太短任何回報(見的ft_min_word_len在/etc/my.sql)

通常我通過全文結合全文檢索與同類或「或」搜索,然後ORDER秩。

p.s.你的腳本很容易被SQL注入。在審查之前不要上網。