【发布时间】:2011-04-08 05:28:18
【问题描述】:
我正在从邮政编码表中查询一堆城市。我只想用一个独特的“城市”来获取结果。 (很多城市都有多个拉链。)怎么会这样?
$query = sprintf("SELECT `Zip`, `City`, `State`, `Lat`, `Long`,
( 3959 * acos( cos( radians('%s') ) * cos( radians( `Lat` ) ) *
cos( radians( `Long` ) - radians('%s') ) +
sin( radians('%s') ) * sin( radians( `Lat` ) ) ) ) AS distance
FROM Zips HAVING distance < '%s' ORDER BY distance LIMIT 0 , 18",
mysql_real_escape_string($lat),
mysql_real_escape_string($lng),
mysql_real_escape_string($lat),
mysql_real_escape_string($radius));
$result = mysql_query($query, $dbConn);
【问题讨论】:
-
你的mySQL计算距离太复杂了,最好使用
deg2rad()、sin()、cos()、acos()等等价的php函数... -
你为什么不使用 MySQL 的 Spatial extension dev.mysql.com/doc/refman/5.5/en/spatial-extensions.html
-
你试过
(3959 * acos( cos( radians(%f) ) * cos( radians( Lat ) ) * cos( radians( Long ) - radians(%f) ) + sin( radians(%f) ) * sin( radians( Lat ) ) ) ) AS distance