基本上我有搜索功能
在我的数据库中我有
我的关键字是
问题
当我搜索macbook时,它显示所有正确的3,但是当我搜索macbook pro时,它仍然显示macbook播放。同样的事情发生在我搜索macbook air 13.3英寸时它仍然显示所有3个macbook。
这是代码
<?php
if(isset($_GET["search"]))
{
$condition = '';
$query = explode(" ", $_GET["search"]);
foreach($query as $text)
{
$condition .= "keywords LIKE '%".mysqli_real_escape_string($connect, $text)."%' OR ";
}
$condition = substr($condition, 0, -4);
$sql_query = "SELECT * FROM products WHERE " . $condition;
$result = mysqli_query($connect, $sql_query);
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
$id = $row['id'];
$title = $row['title'];
$price = $row['price'];
$description = $row['description'];
$keywords = $row['keywords'];
$link = $row['link'];
$metadata = $row['metadata'];
include('inca.php');
}
}
else
{
echo '<label>Data not Found</label>';
}
}
?>
当我搜索Macbook air 13.3英寸时,我希望它只显示13.3英寸的macbook空气..
答案 0 :(得分:1)
你在SQL语句中使用OR,你可能认为它是一个AND。
截至目前,您正在搜索“Macbook”或“air”或“pro”等,其中包含其中包含其中一个关键字的所有内容。
使用AND;它将在您的数据库中搜索使用您在循环中指定的所有关键字的内容。它会搜索'Macbook'和'air'而不是它们分开。
所以代替:
foreach($query as $text) {
$condition .= "keywords LIKE '%".mysqli_real_escape_string($connect, $text)."%' OR ";
}
尝试:
foreach($query as $text) {
$condition .= "keywords LIKE '%".mysqli_real_escape_string($connect, $text)."%' AND";
}