php - 在 mySQL 或 PHP 数组中对结果进行排序?

标签 php mysql sql sorting codeigniter

我正在尝试根据网站访问者与数据库行中列出的地点的距离对 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/

相关文章:

php - 将mysql表插入div中

php - 为什么 openssl_pkey_new() 会失败?

php - 大型自动增量 ID

php - 什么是学习面向对象php的最好的书/站点/教程?

mysql - 如何将R连接到mysql?我们需要在本地主机上单独安装mysql吗?

mysql - 无法在 phpMyAdmin 4.1.12 中设置/更改主键。 table

python - 有没有为 SQL 和 NoSQL 提供数据库抽象层的 python Web 应用程序框架?

python - SQL计算几个向量的谷本系数

mysql - 如何编写一个触发器,在提交插入之前更新同一个表中的行?

php - 未找到 InvalidArgumentException View [layouts.app]。 Laravel-8 LiveWire-2