2014-12-13 4 views
0

Так что я в настоящее время беспорядочно создаю поисковую систему просто из интереса, и мне было любопытно, если бы я мог запросить больше, чем просто столбец ключевых слов в базе данных mysql. На данный момент я могу найти somthing и получить результаты, основанные на моем столбце «keyword». Но если слово или фраза я ищу не внутри столбца ключевого слова, но он найден в столбце заголовка или столбце описания, возможно ли, чтобы он отображался, потому что он нашел его в этих столбцах?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

+0

@hakiko у него есть значение «$ i ++;» – BubblewrapBeast

ответ

0

Я предлагаю вам проверить в MySQL полнотекстовый поиск. http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html.

Это позволяет вам искать несколько ключевых слов в запросе. Кроме того, Full-Text дает вам возможность понять слова как «естественный язык» (так это касается «стоп-слов», «множественных чисел» и «словесных слов»). См. http://dev.mysql.com/doc/refman/5.0/en/fulltext-query-expansion.html

Не выбрасывайте логику «Как». У MySQL полнотекстового поиска есть несколько неприятных вещей, поэтому вы все равно можете использовать эту логику. Вот они:

  1. Ищет ответы, которые возвращают «слишком много» (% 50 или больше), возвращают ничего. Не то, что обычно ожидает поисковик, верно? Обычно люди хотят, чтобы это работало, как Google.
  2. Поисковые запросы на слова, которые не слишком короткий обратный ничего (см ft_min_word_len в /etc/my.sql)

Обычно я совмещаю полнотекстового поиска с как или «или» поиск, а затем ORDER полным текстом ранг.

p.s. сценарий you'r уязвим с SQL-инъекцией. Не отправляйте в Интернет перед просмотром.

Смежные вопросы