2016-04-12 56 views
1

私はデータベースをループしたいと思います。すべての値に対して、クエリのmy $ idarrayで返されたid値を使用して検索を絞りたいと思います。たとえば、ユーザーが「molly loves cats」を検索したいと思ったら、最初に「molly」のデータベースを検索し、すべてのIDを取得して、次の検索で使用します"愛する"など。そして最後に、すべての3つの単語で構成されるすべてのIDのリストを取得します。データベースをループし、返されたid値を使用して絞込み検索

search.php

$searchquery= (isset($_POST['searchq']) ? $_POST['searchq'] : NULL); 
$q = explode(" ", $searchquery); 
foreach($q as $key => $value){ 
     $in = implode("','", $idarray); 
     if($stmt = mysqli_prepare($db_mysqli, "SELECT id FROM tbl_headlines WHERE (name LIKE ? OR header LIKE ?) AND id IN('$in')")){ 
      $searchquerypre = "{$value}%";    
      mysqli_stmt_bind_param($stmt, "ss", $searchquerypre); 
      mysqli_stmt_execute($stmt); 
      mysqli_stmt_store_result($stmt); 
      mysqli_stmt_bind_result($stmt, $id); 

      if(mysqli_stmt_num_rows($stmt) > 0){ 
       while (mysqli_stmt_fetch($stmt)){ 
        $idarray[] = array('id'=> $id, 'resultat'=> true);            
       } 
      } 
      if(mysqli_stmt_num_rows($stmt) == 0){ 
       $idarray[] = array('resultat'=> false); 
      } 
     } 
    } 
echo json_encode($idarray); 

jqueryの

$('#searchquery').on('keyup', function(){ 
      var searchquery = $("#searchquery").val();  

      if ($("#searchquery").val().length > 1) { 
       $.ajax({ 
        type: "POST", 
        dataType: "json", 
        url: "search.php", 
        data: {searchq: searchquery}, 
        success: function(result){ 
         console.dir(result); 

        }, 
        error: function(){ 
         alert('Error'); 
        } 
       }); 
      } 
     }); 
+0

3でクエリを実行すると、なぜそれが1になるのですか? – Naruto

+0

これらの単語を1つのクエリで検索し、その検索の優先度を設定することもできます。 –

+0

@Linda:コードで実際に何が間違っているのかを言わなかったのですか?あなたが非常に簡単なやり方でやっているよりも難しくなったようです。 –

答えて

0

@ scottevans93からの回答に追加する、あなたはまだ同じように近づくことができるが、代わりに、おそらくちょうどあなたのSQLでの検索ではなく、ハードコーディングされたループを統合 - また、それは、オブジェクト、それはどこでも使用できるようにします。この例の出力結果は 'カイル、' だろう

$SearchUsers = new Search(array('Kyle','Bob','Jimmy')); 
echo 'Users like your search: <br />'; 
foreach ($SearchUsers->search('Ky') as $_user) 
{ 
    echo $_user . ', '; 
} 

class Search 
{ 
    protected $SearchTerms; 
    protected $Sql; 

    public function __construct($terms) 
    { 
     $this->Sql = "SELECT * FROM Table WHERE :search"; 
     if(is_array($terms))? $this->SearchTerms = $terms : die(); 
     foreach ($this->SearchTerms as $_term) 
     { 
      $this->Sql .= " LIKE '%".$_term."%'"; 
     } 
    } 

    public function search($input) 
    { 
     $stmp = (Database:GetInstance()->Prepare($this->Sql))->execute(array(':search' => $input)); 
     return $stmp->fetchAll(); 
    } 

} 

は次のように使用することができます。 - ユーザーオブジェクトがある場合は、それを検索条件に渡してsearch()メソッドをより効率的に使用することができます。すべては階層/インフラストラクチャに依存します。

+1

ありがとう私はこれを行ってくれます – Linda

0

あなたは、クエリの3種類のセットを使用することなく、あなたの問題にアプローチすることができ、複数の異なる方法があります。

可能な1つの実装では、個人として単語を検索する場合は、LIKE ''を使用できます。

SELECT * FROM `table` where `text` LIKE '%molly%' and `text` LIKE '%loves%' and `text` LIKE '%cats%'; 
関連する問題