【发布时间】:2014-05-08 04:36:52
【问题描述】:
嗨,朋友们,我需要有关此逻辑的帮助
问题定义:
有4张桌子:
- 项目
- 项目名称
- 项目 ID
- 邮政编码
- 供应商
- 供应商 ID
- 供应商名称
- 电话
- 服务区距离
- 供应商服务区
- 供应商 ID
- 服务区邮编
- 邮政编码详细信息
- 邮政编码
- 纬度
- 经度
- 每个项目都有一个邮政编码
- 一个供应商可以有多个服务区邮政编码
-
当供应商登录时,我将获取供应商服务区域内的所有项目。
例如:如果供应商在他的服务区有两个邮政编码 22032、10031,并且他的服务区距离是 20 英里,那么这些服务区内的所有项目都在 20 英里左右。
-
我正在计算项目邮政编码和供应商邮政编码之间的距离,并在一列中显示最小距离
例如:项目邮政编码 22032 和供应商邮政编码分别为 22031 和 22040:
22032 到 22031 = 3.01 英里
22032 到 22040 = 7.98 英里
那么距离 = 3.01
问题:现在客户想要按距离排序
我的尝试:
- 我尝试使用 PHP 数组和对象执行此操作,但使用大数据时会减慢进程
- 我尝试通过MYSQL距离计算haversine公式计算它,但无法弄清楚
- 我尝试在单独的表格中映射距离,但邮政编码太多
请提出任何可以花费更少时间的逻辑。
【问题讨论】:
-
您当前的查询是什么样的? (获取供应商服务范围内的项目)
-
您可以在查询本身中计算距离并在那里排序
-
我将距离内的所有 service_area_zipcodes 保存在 vendor 表中,然后从项目 INNER JOIN 供应商 WHERE project_zip IN ($vendor_zipcodes) 中获取 SELECT project_name;之后我正在计算与 PHP 循环的距离