【发布时间】:2019-11-05 04:55:51
【问题描述】:
我有一个当前的 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;
}
【问题讨论】:
-
拆分输入并编写多个动态 LIKE 条件...我相信您会在此站点上找到预先存在的答案。
-
如果有人搜索
red red wine,那么red这个词必须在列中出现多少次? -
对不起,每个单词可能只需要出现一次