【问题标题】:How to search for multiple keywords in sql [duplicate]如何在sql中搜索多个关键字[重复]
【发布时间】: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这个词必须在列中出现多少次?
  • 对不起,每个单词可能只需要出现一次

标签: php mysql pdo


【解决方案1】:

如果您可以更改表格以将FULLTEXT 添加到您的姓名列,那么您可以使用Full text Search 选项。

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

Check demo here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2014-09-25
  • 2019-12-25
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多