我正在尝试根据网站访问者与数据库行中列出的地点的距离对 mySQL 结果进行排序。我应该在 mySQL 中进行排序并获得排序的结果,还是从 mySQL 数据库中检索未排序的结果然后使用 PHP 进行排序?性能有差异吗?
如果我使用 mySQL 进行排序,这是我将使用的 SQL 代码。
SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180)
+ COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
AS `distance` FROM `members` HAVING `distance`<=’10′ ORDER BY `distance` ASC
最佳答案
当您必须处理地理数据时,我可以坚定地推荐带有 PostGIS 扩展的 PostgreSQL。计算纬度和经度之间的距离要快得多。在带有 PostGIS 的 PostgreSQL 中,您的查询看起来像这样(未经测试):
SELECT *
FROM members
WHERE ST_Distance_Sphere(members.position, ST_GeomFromText("POINT
(47.8012079 13.0395594)", 4326) <= 10000
ORDER BY ST_Distance_Sphere(members.position, ST_GeomFromText("POINT
(47.8012079 13.0395594)", 4326)
ST_Distance_Sphere(members.position, ST_GeomFromText("POINT
(47.8012079 13.0395594)", 4326)
函数为您提供给定点 (POINT) 之间的距离
(47.8012079 13.0395594)
) 和您的成员(member)的位置 members.position
。您可以在一个语句中多次使用此函数,PostgreSQL 将为您缓存它(并且不会计算两次距离)。
并且不要忘记将所谓的“空间索引”添加到您的 members.position
列。看看http://postgis.refractions.net/和 http://www.postgresql.org/
网上有很多教程,如果你对 postgresql 上手有困难的话。或者,就在这里问 ;)
问候, 晚礼服
关于php - 在 mySQL 或 PHP 数组中对结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6037322/