2017-09-05 43 views
-4

假設我們有一個以title列命名的表Brands,該列可以包含一些單詞的句子。選擇具有包含多個單詞句子(MySql)中的至少一個的列的行

現在我們有像「堆棧溢出網站」一句話,我們要選擇自己的標題欄包含的那個詞意味着堆棧溢出網站一個所有記錄。

我知道有LIKE運營商爲類似的任務但我認爲它只適用於特定的單詞。

此外,我更喜歡使用一個查詢來做我想要的結果。

我感謝你如果可以幫助寫laravel雄辯的查詢。

+0

我認爲你應該從編寫原始MySQL查詢開始,這個嘗試你最好能在你的問題中告訴我們。 –

+0

我想你想全文搜索 – rtfm

+0

@ A.B.Developer檢查我的答案在下面。 –

回答

1

使用explode功能,使它的的數組。 whereIn方法驗證給定列的值是否包含在給定數組中。 試試這個:

$querySentence = "stack overflow website"; 

//Using explode function, make it an array of WORDS 
$wordsArray = explode(" ", $querySentence); 
$dbQuery = Brands::whereIn('title', $wordsArray)->get(); 

更多Laravel whereIn

希望這是有幫助的。

1

您可以通過執行多個相似的語句來完成此操作。像這樣:

SELECT * FROM TABLE WHERE info LIKE '%stack%' OR info LIKE '%overflow%' OR info LIKE '%website%'; 

請注意,這將不會很好地執行大型數據結構。如果你有一個龐大的數據庫,我會建議使用像ElasticSearch這樣的東西,但至少要仔細看看你的表的索引。

1

此查詢可以幫助 SELECT * FROM表WHERE COLUMN LIKE '%堆棧%' 或列LIKE '%溢出%' 或列LIKE '%的網站%'

0

簡單的答案。當使用LIKE來實現它時,使用%。像這樣:

Select * from brands where title LIKE '%stack%' OR title LIKE '%overflow%' OR title LIKE '%website%'

它選擇它所具有的字母。例如,如果你只是搜索STA,它返回堆棧,因爲它有STA內的信件。

更新:口才

Brands::where('title', 'LIKE', '%stack%')->orWhere('title', 'LIKE', '%overflow%')->orWhere('title', 'LIKE', '%website%'); 
相關問題