2015-11-29 5 views
-1

> здесь есть код.как я могу искать несколько слов в базе данных Mysql

i want to search the every word in my database but the results only show with single keyword not the multiple. it is a PDO database when i search single word like facebook then the result is appear if i search two or more word search then the result is not appear.

'

function getResults(){ 
$q=$GLOBALS['q']; 
$p=$GLOBALS['p']; 
$start=($p-1)*10; 
if($p!=null){ 
    $starttime = microtime(true); 
    $sql=$GLOBALS['dbh']->prepare('SELECT title, url, description FROM search WHERE `title` LIKE :q OR `url` LIKE :q OR `description` LIKE :q '); 
    $sql->bindValue(":q", "%$q%"); 
    $sql->execute(); 
    $trs=$sql->fetchAll(PDO::FETCH_ASSOC); 
    $endtime = microtime(true); 
    if($sql->rowCount()==0 || $start>$sql->rowCount()){ 
    return 0; 
    }else{ 
    $duration = $endtime - $starttime; 
    $res=array(); 
    $res['count']=$sql->rowCount(); 
    $res['time']=round($duration, 4); 
    $limitedResults=array_slice($trs, $start, 12); 
    foreach($limitedResults as $r){ 
    $res["results"][]=array($r['title'], $r['url'], $r['description']); 
    } 
    return $res; 
    } 
} 
} 
?> 

'

+0

Как вы передали несколько слов? В 1 переменной? – davejal

+0

Вы имели в виду, что я добавляю другую переменную ..? – Altamash

+0

Вы хотите, чтобы ваши поиски искали фейсбуки и связывались в полях? и если да, то как вы хотите передать их к вашему запросу – davejal

ответ

-1

вот полный скрипт, который вы нашли полезным.

<?php 
       if(isset($_GET["search"])) 
       { 
         $condition = ''; 
         //$query = explode(" ", $_GET["search"]); 
         $query = explode(" ", $_GET["search"]); 

         foreach($query as $text) 
         { 
          $condition .= "`title` LIKE +'%".mysqli_real_escape_string($connect, $text)."%' OR "; 
         } 
         $condition = substr($condition, 0, -4); 
         $sql_query = "SELECT * FROM countries2 WHERE " . $condition; 
         $result = mysqli_query($connect, $sql_query); 
         if(mysqli_num_rows($result) > 0) 
         { 
          while($row = mysqli_fetch_array($result)) 
          { 
           echo '<tr><td>'.$row["title"].'</td></tr>'; 
          } 
         } 
         else 
         { 
          echo '<label>Data not Found</label>'; 
         } 
       } 
       ?> 
0

Вы должны построить динамический запрос для поиска двух слов. В приведенном ниже коде я иллюстрирую запрос здания с помощью GET для отображения запроса и массива. Я использую неназванные параметры ? и «ленивую» привязку, когда это возможно - передача данных в исполнение для удобства.

//Using GET here for testing 

<?php 
//Using GET here for testing 
if(isset($_GET['q'])){ 
$q = $_GET['q']; 
//} 
//First split string 
if (strpos($q, ' ') > 0) { 
$pieces = explode(" ", $q); 
//echo count($pieces); 
//You need an array to store columns 
$columnArray = array("title", "url", "description"); 
//You need an array to store parameters 
$paramArray =array(); 
$clause = "WHERE"; 
} 
//You need to build a dynamic query to perform this. Start with a basic stub 

    $sql = "SELECT `title`, `url`, `description` FROM search "; 

//Start building the query 
//Also see PDO WIKI for use % in placeholders.ie placeholders cannot represent an arbitrary part of the query, but a complete data literal only 
//Loop through columns 
     foreach ($columnArray as $column) { 
      //$sql . 
      foreach ($pieces as $value) { 
       $sql .= " $clause $column LIKE ?"; 
      $clause = "OR"; 
      array_push($paramArray,"%$value%"); 
      } 
} 

//echo query and parameter array 
echo $sql; 
echo "<br>"; 
print_r($paramArray); 

//Prepare and execute query 
// $sth = $db->prepare($sql); 
// $sth->execute($paramArray); 
} 
?> 

Результат от xxx.php? Д = Google амазонка Quora или xxx.php? Д = Google + амазонка + Quora

SELECT `title`, `url`, `description` FROM search WHERE title LIKE ? OR title LIKE ? OR title LIKE ? OR url LIKE ? OR url LIKE ? OR url LIKE ? OR description LIKE ? OR description LIKE ? OR description LIKE ? 
Array ([0] => %google% [1] => %amazon% [2] => %quora% [3] => %google% [4] => %amazon% [5] => %quora% [6] => %google% [7] => %amazon% [8] => %quora%) 
+0

Спасибо за ответ, но на выходе произошла ошибка в браузере. SELECT title, url, description FROM search WHERE 'title' LIKE google ИЛИ' url' LIKE google Array ([0] =>% google% [1] =>% google%) – Altamash

+0

, и я также использую PDO для результата в основном вы можно сказать, что это какая-то маленькая поисковая система и им, используя базу данных MYISAM? – Altamash

+0

Пробовали ли вы код? Вы, похоже, изменили ** WHERE 'title' LIKE? **. Вы должны сохранить **?** –

1

Не знаю, почему вы не использовали @David Strachan (я думаю, это очень хорошее решение), но я попытаюсь объяснить вариант, который вы также можете использовать, и понять, почему в настоящий момент вы не получаете никакого результата.

На этом этапе происходит то, что вы отправляете эти значения в свой запрос, который в конечном итоге становится;

SELECT title, url, description FROM search WHERE `title` LIKE `google+facebook+yahoo` OR `url` LIKE `google+facebook+yahoo` OR `description` LIKE `google+facebook+yahoo` 

Я не думаю, что вы хотите найти титл, содержащий все эти.

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

  1. Вставьте значения в массив (Google + Facebook + Yahoo)
  2. использовать цикл для выбора каждого ключа из массива, созданного и передать, что запрос
  3. сделать запрос добавить это результат в виде массива
Смежные вопросы