簡體   English   中英

如何使我的SQL查詢搜索句子中的多個單詞,即使它們彼此不跟隨

[英]How to make my SQL query search several words in the sentence even if they do not follow each other

我的搜索表單有一個SQL查詢。

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

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

我的研究正在進行。 如果我有一篇名為“我的很棒的文章很棒”的文章,並且我以搜索形式“偉大的文章”撰寫,那么它會起作用。

但是,如果我寫的是“很棒的文章”,這兩個詞就不會互相跟隨,而且行不通。

如何使查詢僅與關鍵字一起使用?

謝謝

您可以執行以下操作:

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

$article = Article::query();
foreach($keywords as $word){
    $article->orWhere('title', 'LIKE', '%'.$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;
});

你為什么不嘗試這樣的事情

$search = "article awesome";
$search = preg_replace("#\s+#", '%', $search);

用'%'替換空格將解決您提到的情況

如果您要進行搜索而忽略單詞order,則應該可以

$search = trim(" article awesome great ");
$search = preg_split("#\s+#", $search);
$where =  "WHERE column like '%" .  implode( "%' AND column like '%", $search ) . "%'";

但是,這將花費更多的執行時間和服務器上的資源,

也認為添加一些注入轉義以避免sql語法錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM