雜記(MYSQL 統計篩選、視圖建立、根據經緯度計算)

統計某個相同值的數量,而且根據數量的某一隻進行篩選git

SELECT count(0) as c, id,name,target FROM f WHERE 1 GROUP by target HAVING c > 1sql

 

根據查詢建立視圖get

CREATE VIEW tar AS (SELECT f.id,f.name,f.short_name,f.target FROM f RIGHT JOIN fv ON f.target = fv.target)it

 

根據經緯度計算半徑io

/**
 *計算某個經緯度的周圍某段距離的正方形的四個點
 *
 *@param lng float 經度
 *@param lat float 緯度
 *@param distance float 該點所在圓的半徑,該圓與此正方形內切,默認值爲0.5公里
 *@return array 正方形的四個點的經緯度座標
 */

function returnSquarePoint($lng, $lat,$distance = 0.5){
    //地球半徑,平均半徑爲6371km
    $EARTH_RADIUS       = 6371;
    $dlng =  2 * asin(sin($distance / (2 * $EARTH_RADIUS)) / cos(deg2rad($lat)));
    $dlng = sprintf("%.5f",rad2deg($dlng));

    $dlat = $distance/$EARTH_RADIUS;
    $dlat = sprintf("%.5f",rad2deg($dlat));

    return array(
        'left-top'      =>array('lat'=>$lat + $dlat,'lng'=>$lng - $dlng),
        'right-top'     =>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
        'left-bottom'   =>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
        'right-bottom'  =>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
    );
}
$squares = returnSquarePoint($longitude, $latitude, $radius);
$condition = "latitude<>0 and latitude>{$squares['right-bottom']['lat']} and latitude<{$squares['left-top']['lat']} and longitude>{$squares['left-top']['lng']} and longitude<{$squares['right-bottom']['lng']}";

執行對應 sql 語句

 

根據當前經緯度按距離升序查詢function

acos(cos($lat*pi()/180 )*cos(latitude*pi()/180)*cos($lng*pi()/180 -longitude*pi()/180)+sin($lat*pi()/180 )*sin(latitude*pi()/180))*6370996.81/1000  as distance

執行對應sql語句 sql語句

相關文章
相關標籤/搜索