gpt4 book ai didi

php - Mysql、PHP、多词搜索

转载 作者:行者123 更新时间:2023-11-29 01:16:57 25 4
gpt4 key购买 nike

我正在尝试在表格中搜索特定单词。

假设我有一个单词列表:打印机、网络、无线、紧急

我只想返回包含所有这些单词的那些行。

SELECT * FROM tickets WHERE concat(subject,body) REGEXP "printer|network|wireless|urgent" 

将返回包含这些词中任何一个的任何行。我怎样才能让它只返回包含所有这些词的那些行。

谢谢,

最佳答案

有两种方法可以做到这一点。第一种是相当明显的方法。假设您拥有需要出现在名为 $necessaryWords 的数组中的所有单词:

$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE 1';

foreach ($necessaryWords as $word)
$sql .= ' AND concat(subject,body) LIKE "%' . $word . '%"'; //Quotes around string

但是,使用 %foo% 是相当慢的,因为不能使用索引,所以这个查询可能会导致巨大的表和/或大量必要的单词的性能问题。

另一种方法是subjectbody 上的FULLTEXT 索引。您可以像这样使用全文 MATCH IN BOOLEAN MODE:

$sql = 'SELECT ... FROM ...'; // and so on
$sql .= ' WHERE MATCH(subject,body) AGAINST("';

foreach ($necessaryWords as $word)
$sql .= ' +' . $word;
$sql .= '")';

请注意,您的表必须使用 MyISAM 才能使用 FULLTEXT 索引。 更新:As of MySQL 5.6 , InnoDB 也支持 FULLTEXT 索引。我想这可能是更好的性能选择。更多关于 bool 模式全文的文档可以在 manual 中找到。 .

关于php - Mysql、PHP、多词搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com