我的公司目前经营家庭活动的上市服务。在我们的CMS中,我们有两种类型的实体分支机构(我们列出的商店)和活动(特殊优惠,场合等)。

通常,在列出事件时,我们会说出该事件是针对哪个分支并创建关系的,我们会在商店附近搜索事件。抓住它们并按距离对它们进行排序。

现在,我们的客户希望能够列出一个没有关联分支机构的一次性活动(例如,他们在花园中心附近而不是他们的一家商店举办节日),我可以很容易地做到这一点也可以按距离对它们进行排序

但是我想知道如何将两者结合起来,所以我们的一个应用程序可以转到我们的API,“老兄,我现在附近有10个事件在哪里?”,该api会列出这10个事件的列表最近的事件。

它应该能够处理正在使用分支位置以及具有其自己唯一位置的事件。

还是您认为我应该只是将位置存储为它自己的实体或具有隐藏的分支,我们可以将这些位置设置为发生事件的位置,但实际上并不会在应用程序中显示为分支:)

最佳答案

如果您的事件和分支机构有纬度/经度头寸,则可以应用Haversine公式计算近似距离,然后按距离递增排序。

如果您愿意使用冗长的查询,MySQL可以做到这一点。 Google Maps小组的此注释提供了查询。您不必使用Google地图来执行此操作;您只需要每个地方的经纬度信息即可。

https://developers.google.com/maps/articles/phpsqlsearch_v3

编辑的确,如果您计算许多对地点之间的距离,这将非常慢。快速执行此类操作的技巧是使用边界框(球形)距离限制,并将索引放在经度和纬度上。

看这个:Geolocation distance SQL from a cities table

关于mysql - 按距离排序,您认为我应该怎么做?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17318511/

10-15 21:27