簡體   English   中英

如何從具有經度和緯度的mysql地址表中獲取經度和緯度的距​​離

[英]How to get distance from latitude and longitude from mysql Address table which have latitude and longitude

 $distance = DB::select(
                DB::raw("
                SELECT a.distance
                FROM ( SELECT user_id, street, store_name,
                    (
                        '".$mean_radius_of_Earth."' * 
                        acos(cos(radians('".$latitude."')) * 
                        cos(radians(latitude)) * 
                        cos(radians(longitude) - 
                        radians('".$longitude."')) + 
                        sin(radians('".$latitude."')) * 
                        sin(radians(latitude)))
                    ) AS distance
                    FROM addresses ) AS a
                    WHERE id= '". $address_id."' 

                ")
            );

我必須使用此address_id作為主鍵來獲取特定行的所有列,但出現錯誤:-未找到列:1054“ where子句”中的未知列“ id”,但是當我嘗試實現這一點時與user_id然后我得到所有字段數據,user_id(不是primary_key),您的幫助將不勝感激, 在此先感謝,並感謝英語不正確

您沒有在子請求中選擇ID,因此,或者在子查詢中進行選擇,或者在子選擇中選擇字段ID:

$distance = DB::select(
            DB::raw("
            SELECT a.distance
            FROM ( SELECT user_id, street, store_name,
                (
                    '".$mean_radius_of_Earth."' * 
                    acos(cos(radians('".$latitude."')) * 
                    cos(radians(latitude)) * 
                    cos(radians(longitude) - 
                    radians('".$longitude."')) + 
                    sin(radians('".$latitude."')) * 
                    sin(radians(latitude)))
                ) AS distance
                FROM addresses 
                WHERE id= '". $address_id."') AS a                    

            ")
        );

在這種情況下,我將利用Eloquent的Appends功能的強大功能。

在您的情況下,它可能看起來像以下內容,

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The accessors to append to the model's array form.
     *
     * @var array
     */
    protected $appends = ['distance'];

    /**
     * Get the distance for the user.
     *
     * @return int
     */
    public function getDistanceAttribute()
    {
        $distance = // Crazy math for distance insert here

        // To get address long and lat stored in separate database 
        // I would eager load them in the query call and then in this 
        // function you'd already have the values ready to go in memory
        $distance = $this->address->long...

        return $distance;
    }
}

該解決方案的優點在於,您可以利用Eloquent的查詢,防止SQL注入混亂,並使事物與模型(而不是查詢)相關聯。

use App\User;

foreach(User::all() as $user) {
    echo $user->distance; // Print's out the distance you wanted
}

echo User::where('id', '=', $address_id)->first()->distance; // Prints out specific user's distance.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM