首页 > 解决方案 > 如何在sql中搜索多个关键字

问题描述

我有一个当前的 SQL 搜索查询,允许用户输入关键字来搜索我的 SQL 数据库。目前,搜索将使用多个单词,但只有相同的顺序,即“Ford Mustang”将显示包含“Ford Mustang”的确切顺序的结果。如果用户输入“Mustang”或“Mustang Ford”,则不会显示任何结果。如何更改搜索查询以显示具有两个关键字但顺序不一定相同的结果?我已经搜索了这个网站和其他网站,发现了类似的问题,但找不到任何我能够解决的答案。

public function getProductByName($name){
    $stmt = $this->pdo->prepare('SELECT * FROM tbl_products WHERE name LIKE :name');
    $name = "%".$name."%";
    $stmt->execute(array('name' => $name));
    return $stmt;
}

有人提出以下建议,可以搜索任一关键字,但我需要搜索两个关键字,而不是按顺序搜索。

public function getProductByName($name){
    $stmt = $this->pdo->prepare('SELECT * FROM tbl_products WHERE name REGEXP :names');
    $names = "[[:<:]](" . str_replace(" ", "|", $name) . ")[[:>:]]";
    $stmt->execute(array('names' => $names));
    return $stmt;
}

标签: phpmysqlpdo

解决方案


如果您可以更改表格以添加FULLTEXT到您的姓名列,那么您可以使用全文搜索选项。

select *
from tbl_products
where match(name) against ('+Mustang +Ford' in boolean mode)

在这里查看演示


推荐阅读