【问题标题】:Adding distance to query results向查询结果添加距离
【发布时间】:2017-07-03 09:42:14
【问题描述】:

我尝试显示搜索结果的距离

代码和查询

$query = DB::select(DB::raw('SELECT id, ( 3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(latitude) ) ) ) AS distance FROM listings HAVING distance < ' . $distance . ' ORDER BY distance') );
        foreach($query as $q)
        {
            array_push($ids, $q->id);

        }
        $placeholders = implode(',',array_fill(0, count($ids), '?'));
        $listings = Listing::whereIn('id', $ids)->orderByRaw("field(id,{$placeholders})", $ids)->paginate(10);

$query 包含距离。

如何在列表结果中添加距离?

【问题讨论】:

    标签: mysql sql laravel laravel-5 eloquent


    【解决方案1】:

    将距离选择查询也附加到 eloquent 查询中。

    使用以下方法;

    Listing::select([
       "*",
       "( 3959 * acos( cos( radians(' . $lat . ') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(' . $lng . ') ) + sin( radians(' . $lat .') ) * sin( radians(latitude) ) ) ) AS distance"
    ])......
    

    另外,你为什么不使用第一个查询的结果,你不需要执行两次相同的查询。

    【讨论】:

    • $listings = Listing::select([ "*", "( 3959 * acos( cos( 弧度(' . $lat . ') ) * cos( 弧度( latitude ) ) * cos(弧度(经度)-弧度('.$lng.'))+ sin(弧度('.$lat.'))* sin(弧度(纬度))))AS距离“])->拥有('距离' , 'orderBy('distance')->get();我收到错误
    • SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在 '* from listings 附近使用 distance distance asc' 排序(SQL:select *, ( as * from listingsdistance distance asc)
    • 用星号“listings.*”指定表名
    【解决方案2】:

    如果您想获得任何特定距离的结果:

    $radius = 15;
    Listing::select(
            DB::raw("*, (6371 * acos(cos(radians('".$lat."')) * cos(radians(latitude)) * cos( radians(longitude) - radians('".$lon."')) + sin(radians('".$lat."')) * sin(radians(latitude)))) AS **distance**"
                )
            )
            ->having("distance", "<", $radius)
            ->orderBy("distance")
            ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多