我正在向我的网站添加搜索功能,目前用户可以按型号名称搜索项目,例如“100D”但是他们无法搜索品牌,在这种情况下它将是“佳能”。我想允许用户搜索'canon 100d'并显示结果,目前用户只能搜索'100d'
我有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 :(得分: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
}