php – 如何使我的SQL查询在句子中搜索几个单词,即使它们不相互跟随

前端之家收集整理的这篇文章主要介绍了php – 如何使我的SQL查询在句子中搜索几个单词,即使它们不相互跟随前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我的搜索表单有一个SQL查询.

$term = $request->get('term');

$queries = Article::where('title','LIKE','%' . $term . '%')->published()->get();

我的研究正在进行中.如果我有一篇名为“我的伟大文章很棒”的文章,并且我在我的搜索表单中写了“greate article”,它就可以了.

但是,如果我写“文章真棒”,这些词语就不会互相影响,而且它不起作用.

如何使我的查询仅使用关键字?

谢谢

最佳答案
您可以执行以下操作:

$term = $request->get('term');
$keywords = explode(" ",$term);

$article = Article::query();
foreach($keywords as $word){
    $article->orWhere('title','%'.$word.'%');
}

$articles = $article->published()->get();

如果只想要包含查询中所有单词的结果,只需将orWhere替换为where.

如果你想过滤掉某些单词,你可以添加如下内容

$filtered = ["a","an","the"];
$filteredKeywords = array_diff($keywords,$filtered);

或者,如果您想要更加动态,可以传递一个闭包:

$filteredKeywords = array_filter($keywords,function($word) {
    return strlen($word) > 2;
});

猜你在找的MySQL相关文章