【发布时间】:2015-02-23 20:55:56
【问题描述】:
$itemList = DB::table('items')
->orderBy('id', 'desc')
->where('item_status', 2)
->where(function($query) use($queryArr)
{
foreach($queryArr as $uID){
$query->whereRaw("tags LIKE '%$uID%'");
}
})->paginate(21);
我很长时间以来一直面临这个问题。当您进行 LIKE 搜索时的问题是,当它只是例如 MEN
时,它会抓取 WOMEN 的数据主要是因为男人在女人里面
我也尝试了以下但失败(这种抢词)men没有women数据
$query->where('tags', 'LIKE', '%'.$uID.'%');
SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';
如何在 laravel 查询生成器中使用该词边界查询
试过这个还是失败 $query->whereRaw("tags LIKE REGEXP '[[:<:>:]]'");
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REGEXP '[[:<:]]Men[[:>:]]')' at line 1 (SQL: select count(*) as aggregate from items where item_status = ? and (tags LIKE REGEXP '[[:<:]]Men[[:>:]]')) (Bindings: array ( 0 => 2, ))
我也理解有人问为什么不创建一个正确的方法来处理这些项目的类别。好吧,我认为现在使用全文搜索对我来说最多就可以了,当涉及到缩放时,我将使用弹性搜索。真的吗?
更新
抱歉没有给出标签示例
包、鞋、男士、坡跟
包、鞋、男士
男士,鞋,包
【问题讨论】:
-
你能给我们看一个
tags的值的例子吗? -
因为当你使用 %men% 时,意味着 women 会返回 true。 nomen 也会返回 true.. 任何以 men 结尾的东西都会返回 true..
-
tags字段中有空格分隔的标签列表吗? -
@AlexeyMatskoff 逗号,刚刚更新。
-
@lukasgeiter 刚刚更新。