色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql 查詢 問號,like函數的用法

洪振霞2年前56瀏覽0評論
mysql 查詢 問號,like函數的用法?

引言

本文接著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 :-)

我是@程序員小助手,持續分享編程知識,歡迎關注。