选择具有列的行包含至少一个多字句子(MySql)

时间:2017-09-05 05:55:39

标签: php mysql laravel

假设我们有一个以Brands列命名的表title,该列可以包含一些单词的句子。

现在我们有一个像“堆栈溢出网站”这样的句子,我们希望选择其标题栏中包含其中一个词的所有记录,意味着堆栈溢出网站

我知道有LIKE运算符来执行类似的任务但我认为它仅适用于特定的单词。

此外,我更喜欢使用一个查询来完成我想要的结果。

我感谢你,如果能帮助用laravel eloquent写这个查询。

4 个答案:

答案 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();

有关Laravel whereIn

的更多信息

希望它有用。

答案 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%');