統計某個相同值的數量,而且根據數量的某一隻進行篩選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語句