作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用接受用户输入作为字符串的全局搜索栏。但是,我想发出特殊的打字字符。想想点、逗号等。您可以在下面看到我当前的数据库检查(因为它是基于 Ajax 的):
public function scopeWhereName($query, $queryString) {
$query->where(function ($query) use ($queryString) {
$query->where(\DB::raw("REPLACE(name, ' ', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '.', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, ',', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '!', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '?', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, ':', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '-', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '@', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '#', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '&', '')"), 'LIKE', '%' . $queryString . '%')
->orWhere(\DB::raw("REPLACE(name, '/', '')"), 'LIKE', '%' . $queryString . '%');
});
}
如标题所述,我的问题是是否有可能将上述查询变成更好的查询,从而使其性能更轻且更易于阅读。
最佳答案
您可以简化查询创建:
$chars = [' ', '.', ',', ...];
foreach($chars as $char) {
$query->orWhere(\DB::raw("REPLACE(name, '$char', '')"), 'LIKE', '%' . $queryString . '%')
}
如果您进行大量搜索,您也许应该创建一个单独的列来存储没有特殊字符的名称。
关于mysql - Laravel 原始查询 : Removing chars from string | How can it be improved?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49792642/
我是一名优秀的程序员,十分优秀!