2014-12-13 147 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注入。在审查之前不要上网。