1

对于上下文,虽然范围不限于此,但我使用的是带有分页功能的 CakePHP 2.4.4。这会查询结果(我相信使用 ORDER、LIMIT 和 OFFSET),一旦返回结果,我就会计算一个字段。在这种情况下,用户输入一个邮政编码,在返回结果时,单独计算搜索邮政编码和结果邮政编码之间的地理距离。我不能这样订购,因为我一次只有一页结果。

我将如何手动执行此操作?我想我可以在查询中获得所有结果,然后计算每个结果的距离,然后订购,然后将那些不在该页面上的内容删除,但这似乎非常昂贵。例如,Autotrader 返回数十万个结果,它们可以按距离排序,然后计算。

在我的项目中,数学是在 PHP 中完成的,但我希望这需要在查询中移动,但我认为这使得它变得昂贵。

如何按未实际存储在数据库中的计算字段对所有结果进行排序?

4

2 回答 2

1

不确定这里的 PHP 是不是进行数学运算的正确位置。特别是如果该表中有很多记录要过滤。

你可能想看看 http://www.dereuromark.de/2012/06/12/geocoding-with-cakephp/

您似乎正在处理距离问题。在那篇文章中,整个计算直接在 SQL 中完成 - 使用虚拟字段和通过行为的干净方法。试着让这个工作。它不仅可以让您轻松处理距离或纬度/经度字段,还可以使其保持干燥。

排序和过滤都包括在内。

于 2014-01-30T13:36:13.730 回答
0

如果您正在进行复杂的计算,请将代码移动到存储过程。

于 2014-01-30T13:34:08.747 回答