2017-06-04 4 views
-1

私は自分のウェブサイトに検索機能を追加していますが、現在はモデル名で項目を検索できます。たとえば100Dです。 「キヤノン」。私はユーザーに 'canon 100d'を検索させ、その結果が表示されます。現在、ユーザーは '100d'のみを検索できますAJAXで複数のテーブルにまたがってMYSQLIレコードを検索する

私は2つのテーブルを持っています。 'これは、ブランドの情報をモデルとは別に保存することを可能にします。なぜなら、1つの「ブランド」対多の「モデル」があるからです。このため、私はモデルテーブル内にブランド 'id'だけを格納します。ここで

は、ここでは、これは検索フォームからAJAX経由で呼ばれて、私の「fetch.php」ファイルである私は、検索フォームに入力のベースモデルの検索クエリは次のとおりです。

$model_search_query = $cameras_pdo->prepare("SELECT * FROM models WHERE model LIKE :search"); 
    $model_search_query->execute(array(':search' => "%" . $_POST['search'] . "%")); 

    while ($model_search = $model_search_query->fetch(PDO::FETCH_ASSOC)) { 
     $brand_search_query = "SELECT brand FROM brands WHERE id =" . $model_search['brand']; 
     $brand_search = mysqli_fetch_assoc(mysqli_query($cameras, $brand_search_query)); 

     // OUTPUT SEARCH RESULTS HERE 

    } 

?> 

上記のコードでは、 '100d'を検索した後、 'Canon 100D'という結果が表示されます。これは、入力に基づいてブランド名を見つけるwhileループのクエリがあるためです。

文字列「canon 100d」を検索できるようにしたい。ブランド名がモデルに別のテーブルに格納されていても、結果はまだ返されます。

私は入力に基づいてブランドを検索し、ブランドテーブルのブランドのIDを返し、モデル検索クエリで使用できる別のクエリを作成することでこれを試みました...これはうまくいかず、誰かが私の問題を解決する方法を知っていれば大いに感謝します。私はこれをテストしていませんが、あなたがJOINを必要とするようだありがとう

+0

このクエリを試してみてください。これらの両方のAPIを同じ意味で使用しているように見えますが、そのようには機能しません。どちらがあなた次第ですか - [この記事](http://php.net/manual/en/mysqlinfo.api.choosing.php)は、どちらを決定するのに役立ちます。重要なことは、プレースホルダを使用して変数を 'prepare()'でバインドし、変数を直接クエリ文字列に挿入しないことです。 – Qirel

答えて

0

、あなたがMySQLiをとPDOを混同しているように見える

$search_query = explode(" ", $_POST['search']); 
$model_search_query = $cameras_pdo->prepare("SELECT m.id,m.model,b.brand FROM models m INNER JOIN brands b ON b.id = m.brand WHERE (m.model LIKE :model AND b.brand LIKE :brand) OR m.model LIKE :model"); 
$model_search_query->execute(array(':model' => "%" . $search_query[1] . "%", ':brand'=>"%" . $search_query[0] . "%")); 

while ($model_search = $model_search_query->fetch(PDO::FETCH_ASSOC)) { 

    // OUTPUT SEARCH RESULTS HERE 

} 
+0

こんにちは、ありがとう、私はちょうどそれをテストして、これは私がモデルではなくブランドを検索することができます。ブランドを検索すると、このエラーとともに結果が出力されます。警告:mysqli_fetch_assoc()は、パラメータ1がmysqli_result、 – Bradley

関連する問題