2017-06-04 45 views
-1

我正在向我的網站添加搜索功能,目前用戶可以按照模型名稱搜索一個項目,例如「100D」,但他們無法搜索品牌,在這種情況下,成爲'佳能'。我想讓用戶搜索'canon 100d',結果顯示出來,目前用戶只能搜索'100d'使用AJAX在多個表格中搜索MYSQLI記錄

我有2個表格,一個是'品牌',一個是'模型',這允許我將品牌信息與模型分開存儲,因爲有一個'品牌'對多'模型'。正因爲如此,我只將品牌'id'存儲在模型表中。

這裏是我的「fetch.php」文件,這是通過AJAX從搜索表單調用,這裏是我搜索在搜索表單根據輸入的型號查詢:

$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,然後可以在模型搜索查詢中使用...這不起作用,如果有人知道解決我的問題的方法,將不勝感激。三江源

+0

你似乎混淆PDO與庫MySQLi。看起來你可以交替使用這兩種API,但它不會以這種方式工作 - 你需要堅持一個。哪一個取決於你 - [這篇文章](http://php.net/manual/en/mysqlinfo.api.choosing.php)可以幫助你決定哪一個。重要的是你使用佔位符,並用'prepare()'綁定你的變量,而不是直接將變量注入到查詢字符串中。 – Qirel

回答

0

我沒有測試過這一點,但它似乎你需要一個JOIN,嘗試此查詢

$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