首页 >

mysql 查询 问号,like函数的用法 – 数据库 – 前端,centos mysql 命令

mysql 视图权限,mysql表自动排序,mysql 移除重装win,linux mysql扩展未开启,mysql内分组,centos mysql 命令mysql 查询 问号,like函数的用法 - 数据库 - 前端,centos mysql 命令

本文接着laravel的功能讲解,说一说在模型中查询条件内,使用like这样的SQL关键字 进行子字符串匹配。并通过几个示例,和不同的实现方法,为大家展示laravel的灵活性。

学习时间

比如有一个模型,存储的是用户的订阅数据。现在根据传入的参数,要筛选出某个电子邮件关联的所有订阅记录, 或者根据用户姓名关键字关联的所有订阅记录,代码如下:

BookingDates::where(’email’, Input::get(’email’))->orWhere(‘name’, ‘like’, ‘%’ . Input::get(‘name’) . ‘%’)->get();

上面代码生成的SQL大约是下面这样的:

select * from booking_dates where email=’my@email.com’ or name like ‘%John%’

这样的做法固然是可以的,但是大家知道包含 like 关键字的SQL语句是肯定命中不了数据库索引的。所以一般大家都要避免这种操作。 如果实在不行,在可读性上,大家可以尝试一下laravel提供的本地作用域功能, 在模型内,或者全局内创建一个查询方法。

public function scopeWhereLike($query, $column, $value) { return $query->where($column, ‘like’, ‘%’.$value.’%’); }

这个是组成and SQL语句的方式,当然还有or SQL语句。

public function scopeOrWhereLike($query, $column, $value) { return $query->orWhere($column, ‘like’, ‘%’.$value.’%’); }

这样上面的查询语句就可以改造成这样:

$result = BookingDates::whereLike(’email’, $email)->orWhereLike(‘name’, $name)->get();

把查询语句单独拿出来封装为公用的方法,使程序更加简洁易用。

当然了,如果倾向于使用原生的SQL语句实现,在模型的查询方法上可以像下面这样写:

BookingDates::whereRaw(’email = ? or name like ?’, [$request->email,”%{$request->name}%”])->get();

特别注意的是laravel的参数绑定是使用问号的。

最后再说一个知识点,就是MySQL内置的关键字,除了like匹配之外,大家还可以使用内置字符串函数instr进行判断。 那么还是使用原生的查询方式,代码如下:

BookingDates::whereRaw(’email = ? or instr(name, ?) > 0′, [$request->email,”%{$request->name}%”])->get();

写在最后

本文讲的知识点比较小,就是手动组装MySQL的查询语句。大家应该尽量避免MySQL的字符串匹配和操作, 这一部分会给查询过程带来性能的损耗。

Happy coding 🙂

偶是@程序员小助手,持续分享编程知识,欢迎关注。


mysql 查询 问号,like函数的用法 - 数据库 - 前端,centos mysql 命令
  • mysql高级查询,mysql如何指定查询一张表的最后5行记录和最前5行记录 - 数据库 - 前端,mysql删除root密码
  • mysql高级查询,mysql如何指定查询一张表的最后5行记录和最前5行记录 - 数据库 - 前端,mysql删除root密码 | mysql高级查询,mysql如何指定查询一张表的最后5行记录和最前5行记录 - 数据库 - 前端,mysql删除root密码 ...

    mysql 查询 问号,like函数的用法 - 数据库 - 前端,centos mysql 命令
  • gitlab环境要求 - 数据库 - 前端|
  • gitlab环境要求 - 数据库 - 前端| | gitlab环境要求 - 数据库 - 前端| ...

    mysql 查询 问号,like函数的用法 - 数据库 - 前端,centos mysql 命令
  • mysql数据库分区,linux - 数据库 - 前端,mysql触发器 触发条件
  • mysql数据库分区,linux - 数据库 - 前端,mysql触发器 触发条件 | mysql数据库分区,linux - 数据库 - 前端,mysql触发器 触发条件 ...