首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php中的外卖餐厅查找程序帮助

php中的外卖餐厅查找程序帮助
EN

Stack Overflow用户
提问于 2012-01-17 07:54:20
回答 2查看 248关注 0票数 0

好的,我正在建立一个外卖查找器,将找到一个英国邮政编码设置距离内的外卖。接下来,用户在输入框中输入他/她的邮政编码,然后单击submit,网站就会搜索用户附近的外卖。但问题是,这种搜索是基于单个外卖的送货距离。因此,如果外卖的送货距离是12英里,并且邮政编码在外卖的12英里内,那么结果中就会显示出来。

我要求的不是代码,而是如何做到这一点的逻辑帮助。

代码语言:javascript
复制
 SELECT * , 6371 * ACos( Cos( RADIANS( latitude ) ) * Cos( RADIANS( 56.0062 ) ) *  Cos(        RADIANS( - 3.78189 ) - RADIANS( longitude ) ) + Sin( RADIANS( latitude ) ) *    Sin( RADIANS( 56.0062 ) ) ) AS Distance
 FROM postcodes
 HAVING Distance <= '10'
 ORDER BY Distance
 LIMIT 3720 , 30  
EN

回答 2

Stack Overflow用户

发布于 2012-01-17 08:20:58

为了提高性能,可以考虑删除不需要的字段。问题是您正在对一个计算值进行排序,因此需要检查每一行。

理想情况下,您应该执行额外的筛选以减少所需的行数。也许匹配邮政编码的前缀可能会有所帮助。您可能会注意到,如果邮政编码的前X个字符不匹配,那么它一定在12英里之外。

如果您有很多字段要检索,您还可以看到late row lookup带来的巨大性能提升。在您的情况下,这特别有用,因为您可以为MySQL提供一个小得多的数据集来进行排序。

这个想法是只提取每条记录的ID和距离,对它们进行排序,然后提取前N条记录(无论您需要多少记录)。然后,您可以使用获取的ID连接回原始表并检索其余数据。这很有帮助,因为它允许MySQL在执行排序时使用较少的内存,并且如果数据集不在内存中,您还可以根据行的大小来避免一些磁盘寻道。

票数 0
EN

Stack Overflow用户

发布于 2012-01-17 10:24:49

另一个完全不同的选择。如果你只关注英国,你可以考虑使用某种类型的投影到笛卡尔坐标系中。我相信OSGB可能适用于英国,并且应该会给出最小的误差。

这打开了使用MySQL的spatial extensions在一系列点列上添加R树索引的可能性。这本身不能给你足够精确的距离,但它可以让你将数据集缩小到一个小得多的部分,在那里可以有效地计算出真正的距离。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8887953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档