[英]how to use the alised column in the where clause in laravel
我想通過將時區偏移 +05:54 從位置表中獲取當前日期的所有max_id
和min_id
。 我試過了。
$maxminpositionids = DB::table('tc_positions')
->select(DB::raw('max(id) maxid, min(id) minid, deviceid, date(CONVERT_TZ(servertime,\'+00:00\',\'+05:45\' )) as serv'))
->where('serv', '=', Carbon::now()->toDateString())
->get();
有沒有辦法解決和優化這個查詢?
在 MySQL 中,您可以在select
子句中創建列別名,但是,您不能在同一查詢的where
子句中使用它們,因為它是無效的語法。 我只能猜測原因,這可能是一個依賴問題,因為當搜索記錄時,引擎會檢查它們是否會在結果集中,然后才會運行 select 子句中的邏輯。 這只是一個猜測,但它非常有意義,因為如果選擇部分首先運行,查詢會慢得多,而且,我們會遇到需要原始字段以及可能創建與現有列相同的別名等問題姓名。 無論我對原因是否正確,都不能在where
子句中使用列別名。 相反,只需調用whereRaw
並將相同的值傳遞給它:
$serv = 'date(CONVERT_TZ(servertime,\'+00:00\',\'+05:45\' ))';
$maxminpositionids = DB::table('tc_positions')
->select(DB::raw('max(id) maxid, min(id) minid, deviceid, '.$serv.' as serv'))
->whereRaw($serv.'= ?', Carbon::now()->toDateString())
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.