gpt4 book ai didi

mysql - 如何在 laravel 的 where 子句中使用 alized 列

转载 作者:行者123 更新时间:2023-11-29 09:34:08 27 4
gpt4 key购买 nike

我想通过将时区偏移 +05:54 来从位置表中获取当前日期的所有 max_idmin_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();

我遇到了这个错误 error

有什么方法可以解决和优化这个查询吗?

最佳答案

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

关于mysql - 如何在 laravel 的 where 子句中使用 alized 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58048100/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com