首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel / MySQL在where子句中使用计算的别名列

Laravel / MySQL在where子句中使用计算的别名列
EN

Stack Overflow用户
提问于 2018-08-16 18:33:06
回答 2查看 1.9K关注 0票数 2

有没有人可以帮我写下面的代码。我收到一个错误,因为列‘距离’不存在,即使我已经定义为...

代码语言:javascript
复制
public static function getByDistance($lat, $lng, $distance)
{
  $result = Auction::join('users', 'auctions.user_id', '=', 'users.id')
        ->select(DB::raw('users.id', '( 3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(lat) ) ) ) as distance'))
        ->where ('distance', '<', $distance)
        ->get();

return $result;    

}
EN

回答 2

Stack Overflow用户

发布于 2018-08-16 18:41:29

MySQL在一些版本之前就去掉了这种与别名列的比较。

它只适用于排序、分组和拥有。

您可以使用:

代码语言:javascript
复制
whereRaw( '(SUBQUERY) < ?', ['distance' => $distance])

我建议对空值使用coalesce。

编辑

提供的另一个答案也是有效的。

票数 2
EN

Stack Overflow用户

发布于 2018-08-16 19:16:26

HAVING可用于比较别名的值。

代码语言:javascript
复制
having('distance', '<', $distance);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51874964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档