在PHP中使用SELECT WHERE分组相似值的更好方法

时间:2013-02-21 21:45:57

标签: php mysql select gps where

我正在尝试将15平方码内的相似值分组(因此具体值)。

这是通过获取纬度/经度值,从中减去或添加另一个值来完成的,如果此条件大于/小于该值,则组

我通过使用以下代码从mySQL DB中选择数据来尝试使用PHP:

$summarisedData = mysql_query("SELECT P_ID,COUNT(*) 
FROM road_awareness 
WHERE 
(
  (
     (
     LAT - '$value[LAT]' < (0.006858/69) 
     AND 
     LAT - '$value[LAT]' > (-0.006858/69)
     ) 
  OR 
     (
     LAT + '$value[LAT]' < (0.006858/69) 
     AND 
     LAT + '$value[LAT]' > (-0.006858/69) 
     )
   ) 
AND
 (
    (
    LON - '$value[LON]' < 0.006858/(cos($lat*M_PI/180)*69) 
    AND 
    LON - '$value[LON]' > -0.006858/(cos($lat*M_PI/180)*69)
    )
  OR 
    (
    LON + $value[LON]' < 0.006858/(cos($lat*M_PI/180)*69) 
    AND 
    LON + '$value[LON]' > -0.006858/(cos($lat*M_PI/180)*69)
    )
  )
)
GROUP BY LAT, LON");

这段代码非常hacky,有很多重复的代码,我不确定它是否正确。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

可能最好在road_awareness中的每条记录上预先计算一些“扇区”值(每个15码方格),并且在查询之前确定哪个扇区落在你的$ value [LAT] / $ value [LON]并按部门选择。