В 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();