我使用的是一个全局搜索栏,它接受用户输入作为字符串。但是,我想发出特殊的键入字符。请考虑点、逗号等。您可以在下面看到我当前的数据库检查(因为它是基于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 . '%');
});
}
如标题所述,我的问题是,是否有可能将上面的查询转换成更好的查询,从而使其性能更轻、更易于阅读。
1条答案
按热度按时间w1jd8yoj1#
您可以简化查询创建:
如果你做了大量的搜索,你也许应该创建一个单独的列来存储没有特殊字符的名字。