自定义MySQL顺序依赖于PHP函数值

时间:2014-11-02 10:59:25

标签: php mysql sql web laravel-4

我有一个像这样的数据库

http://i.stack.imgur.com/MHEwr.jpg

我有一个PHP函数,可以从用户(网络用户)计算该地址的距离{get_distance($ person_location)}。

我需要有一个查询,它将使用该函数,并按照距离用户[使用PHP的{get_distance($ person_location)}函数的距离从数据库顺序返回数据。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

您无法通过PHP函数的结果在服务器端对SQL结果进行排序。*

您的一般问题有两种方法:

1.将计算移至SQL

您的距离计算可能依赖于地理坐标(纬度和经度)。保存数据库中每个地址的数据,然后在SQL中进行距离计算。

在此处详细了解如何在MySQL中执行此操作:Fastest Way to Find Distance Between Two Lat/Long Points

你的待办事项清单。做以下事情:

  • 从数据库中获取所有地址
  • 使用PHP API计算每个地址的地理坐标
  • 更新您的数据库并将这些地理坐标放在额外的列中

从现在开始做以下事情:

  • 每次向表格添加行时,请事先使用API​​计算地理坐标并添加它们
  • 每次更改数据库中的地址时,使用PHP API计算新的地理坐标并更新它们
  • 每当您需要计算当前用户与所有其他地址的距离时,请执行SELECT查询计算距离并进行排序

2.用PHP完成所有事情

在数据库中查询所有地址,将它们放入PHP数组中,使用您的函数计算当前用户的距离,然后对数组进行排序。

我强烈建议不要这样做,并在服务器端实施所有内容(方法1)。

* 理论上你可以通过计算离线每个地址的距离,用结果更新临时表,然后使用这个临时表再次查询你的表来对结果进行排序。但是,这比用PHP做的更糟糕,你甚至不应该考虑这个!

答案 1 :(得分:1)

imho不可能在查询中使用PHP函数,只能使用MySQL提供的聚合函数。 我想你需要通过PHP处理数据。