gpt4 book ai didi

php - 使用通配符改进 mysql 搜索结果。 Joomla 3.3

转载 作者:行者123 更新时间:2023-11-30 00:17:23 25 4
gpt4 key购买 nike

我的 mvc 模型中有一个过滤器,它从搜索字段中获取变量。它可以搜索标题等内容,但搜索结果很差。这可能是一个简单的语法问题,但我无法看到它搜索。

我有一些项目标题,例如:

“Manolo Blahnik Carolyne 金色亮片露跟高跟鞋(35.5,金色)”或者“Belstaff Trialmaster 夹克”

目前,如果您搜索“manolo blahnik Shoes”或“belstaff Jacket”,您不会得到任何结果。如何从字符串的任何部分中匹配任何单词?

我尝试将 % 添加到变量的任一侧,例如 %'.$keyword.'% 但这不起作用。

//Filtering search field
$jinput = JFactory::getApplication()->input;
$keyword = $jinput->get('keyword', '', 'NULL');
if($keyword!=''){
$keyword = $db->Quote('%' . $db->escape($keyword, true) . '%');
$query->where('( a.title LIKE '.$keyword.' OR a.features LIKE '.$keyword.' OR a.brand LIKE '.$keyword.' )');
}

最佳答案

我认为你最好的选择是分解你得到的搜索结果并从中创建 OR

所以

$keyword = "manolo blahnik shoes";
$keyWords = explode(' ', $keyword);

$ors = array();

foreach($keywords as $word) {
$word = $db->Quote('%' . $db->escape($word, true) . '%');
$ors[] = "a.title LIKE %word";
$ors[] = "a.features LIKE $word";
$ors[] = "a.title brand LIKE $word"
}

$queryString = implode(' OR ', $ors');
$query->where($queryString);

由于只有一个单词应该位于 3 列中的一列中,因此您可以拥有一整串 OR。

当然,这可能会成为一个相当大的查询,所以也许这是您必须记住的事情。

此代码也是一个示例,您可以根据需要进行更改,例如在爆炸之前确保 $keywords 不为空,转义您获得的关键字或使用准备好的语句来防止类似的 sql 注入(inject)。

对于这样的事情,明智的做法是查看 solr 进行搜索,而不是直接使用 mysql 进行搜索。或者,如果您有 myisam 表,您可以查看全文搜索 mysql FULLTEXT search multiple words

关于php - 使用通配符改进 mysql 搜索结果。 Joomla 3.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23550362/

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