表中的MySQL搜索关键字与OR或AND或全文匹配

时间:2015-06-28 01:23:28

标签: php html mysql sql database

我有一个搜索表单来搜索MySQL中的产品,表格包含:

1)id

2)条形码

3)product_name

4)制造商

5)模型

我还有更多的领域,如价格税等,但它们现在并不重要。

使用以下代码我正在搜索数据库,它工作得很好,但现在有问题。这是代码

首先是HTML表单

<form method="post" name="search">
<input type="text"  name="keywords" value="...">
<input type="submit"  value="search">
</form>

现在PHP和MySQL代码

$searchterms= mysqli_real_escape_string($database,$_POST['keywords']);
$result=mysqli_query($db,"
    SELECT * FROM `products` 
WHERE `barcode` LIKE '%$searchterms%'  
OR `product_name` LIKE '%$searchterms%' 
OR `model` LIKE '%$searchterms%'  
OR `manufacturer` LIKE '%$searchterms%'
");
$rows=mysqli_num_rows($result);
if(mysqli_num_rows($result)>0){
?>

我尝试过全文搜索,但收到错误

    $searchterms=        mysqli_real_escape_string($database,$_POST['keywords']);
$result=mysqli_query($database,"SELECT * FROM products
    WHERE MATCH (product,manufacturer,model)
AGAINST ('$searchterms' IN NATURAL LANGUAGE MODE);");
    $rows=mysqli_num_rows($result);
    if(mysqli_num_rows($result)>0){
    ?>

错误文字 警告:mysqli_num_rows()要求参数1为mysqli_result,布尔值在

中给出

正如您所看到和理解的那样,我只需要在数据库中搜索一个输入文本。

如果我搜索关键字:“三星”,那么我会从制造商三星那里获得产品。

如果我搜索模型“S6 Edge”,那么我会得到带有S6或S6边缘的产品

BUT

如果我使用2个字词关键字“samsung s6”,则搜索结果为空

知道为什么吗?

编辑:

以下是我在小提琴中使用的完整代码

https://jsfiddle.net/psnf0arw/

查看完整的PHP代码会更容易理解

2 个答案:

答案 0 :(得分:1)

如果您打算在任何这些字段中找到任何关键字,可以尝试使用REGEXP而不是LIKE。

@using (Ajax.BeginForm( actionName: "Edit",
                            controllerName: "Home",
                            routeValues: null,
                            ajaxOptions: new AjaxOptions() { HttpMethod = "POST", OnSuccess = "RecordUpdated", OnFailure = "AjaxFailed" },
                            htmlAttributes: new { id = "editForm" }))
{
    <!-- Form Body -->
}

答案 1 :(得分:0)

首先。当您使用特定的型号名称时,查询将被设置为 的是:

选择 * 从 products 哪里 barcode喜欢'%samsung s6%'或 product_name喜欢'%samsung s6%'或 model喜欢'%samsung s6%'或 manufacturer喜欢'%samsung s6%'

将不会返回任何内容,因为没有匹配的模型名称等于'samsung s6'。代码处理搜索条件,如单个字符串'samsung s6',如果不匹配则不返回任何内容。