2016-04-02 3 views
-2

Я пытаюсь создать функцию поиска, которая будет искать несколько столбцов, чтобы найти соответствие по ключевому слову. Например, когда пользователь вводит ключевое слово для поиска, мне нужно провести поиск по пяти столбцам категории и вернуть соответствующие имена строк для всех строк, которые содержат ключевое слово, в любом из столбцов категории. Код выглядит следующим образом:Поиск по нескольким столбцам

<?php 
    mysql_connect($dbhost, $dbuser, $dbpass) or die("could not connect."); 
    mysql_select_db($dbname) or die("could not find database."); 
    $result = ""; 
    //collect info from database 
    if(isset($_POST['search'])) { 
     $searchq = $_POST['search']; 
     $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq); 
//SQL query 
     $query = mysql_query("SELECT name FROM institutes WHERE category1 LIKE '%$searchq%' OR category2 LIKE '%$searchq%' OR category3 LIKE '%$searchq%' OR category4 LIKE '%$searchq%' OR category5 LIKE '%$searchq%'") or die("No records found."); 
     $count = mysql_num_rows($query); 
     if($count == 0) 
     { 
      $output = "There's no search result"; 
     } 
     else { 
      while($array = mysql_fetch_assoc($query)) 
    { 
    ?> 
     <li><?php echo $array['name'];?></li> 
    <?php 
    } 
    ?> 
     } 
    } 
    </ul> 

Я пробовал различные способы поиска, но каждый раз, либо имеется ошибка или код просто возвращает каждое имя строки, независимо от условий. решения этой проблемы будут оценены.

+0

Полный текстовый поиск может быть лучшим вариантом. http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html – user1751825

+0

вы уверены, что ваш '$ searchq = preg_replace (" # [^ 0-9a-z] #i "," " , $ searchq); 'правильная работа? – Exception

+0

Хммм, а) Вы пытались выполнить эхо '$ searchq' по линии preg_replace? б) Если возникают ошибки, что сказать? Общий подход и SQL кажутся мне полезными (не пробовав или не зная ваши данные ...). – ahuemmer

ответ

0
<?php 
    mysql_connect($dbhost, $dbuser, $dbpass) or die("could not connect."); 
    mysql_select_db($dbname) or die("could not find database."); 
    $result = ""; 
    //collect info from database 
    if(isset($_POST['search'])&& $_POST['search'] != "")) { 
     $searchq = $_POST['search']; 
     $searchq = preg_replace("#[^0-9a-z]#i","",$searchq); 

//SQL query 
     $query = mysql_query("SELECT name FROM institutes WHERE category1 LIKE '%".$searchq."%' OR category2 LIKE '%".$searchq."%' OR category3 LIKE '%".$searchq."%' OR category4 LIKE '%".$searchq."%' OR category5 LIKE '%".$searchq."%'"); 
     $count = mysql_num_rows($query); 
     if($count == 0) 
     { 
      $output = "There's no search result"; 
     } 
else { 
      while($row= mysql_fetch_assoc($query)) 
      { 

      echo $row['name']; 

      } 

     } 
    } 
    ?> 
Смежные вопросы