假设我们有一个以Brands
列命名的表title
,该列可以包含一些单词的句子。
现在我们有一个像“堆栈溢出网站”这样的句子,我们希望选择其标题栏中包含其中一个词的所有记录,意味着堆栈或溢出或网站。
我知道有LIKE
运算符来执行类似的任务但我认为它仅适用于特定的单词。
此外,我更喜欢使用一个查询来完成我想要的结果。
我感谢你,如果能帮助用laravel eloquent写这个查询。
答案 0 :(得分:1)
您可以通过执行多个like语句来执行此操作。像这样:
SELECT * FROM TABLE WHERE info LIKE '%stack%' OR info LIKE '%overflow%' OR info LIKE '%website%';
请注意,这在大型数据结构上的效果不佳。如果你有一个大型数据库,我会建议使用类似ElasticSearch的东西,但至少要仔细看看你的表的索引。
答案 1 :(得分:1)
此查询可能有所帮助 SELECT * FROM TABLE WHERE COLUMN LIKE'%stack%'或列像'%溢出%'或栏目'%网站%'
答案 2 :(得分: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();
的更多信息
希望它有用。
答案 3 :(得分:0)
简单的回答。使用%
实现目标时,请使用LIKE
。像这样:
Select * from brands where title LIKE '%stack%' OR title LIKE '%overflow%' OR title LIKE '%website%'
。
选择它所具有的字母。例如,如果您只是搜索 sta ,它将返回堆栈,因为它在堆栈中具有 sta 的字母
更新: Eloquent
Brands::where('title', 'LIKE', '%stack%')->orWhere('title', 'LIKE', '%overflow%')->orWhere('title', 'LIKE', '%website%');