gpt4 book ai didi

php - 距离查询

转载 作者:行者123 更新时间:2023-11-29 07:04:02 24 4
gpt4 key购买 nike

不确定如何构建它,所以向专家开放:

我在数据库中有一个客户列表,这些客户正在寻找其位置半径范围内的事件。我可以存储他们的邮政编码(或纬度/经度)和他们参加事件的最大距离。所以列 lat、lng、distance(例如:lat = '22.7447858'、lng = '-82.1398589'、distance = 25)。

事件全天发布并存储它们的邮政编码/纬度/经度。

我想运行一个查询(每天一次)来获取某个事件的客户。我在看 Cyber​​Junkies 的帖子 Mysql within distance query但问题是我正在相反的方向运行查询。我需要找到其“圈子距离”覆盖当前事件的客户,而不是相反。不确定如何存储圆距离(上面的 3 列是否足够好,或者是否有更好的方法来存储此类查询的数据)?不确定如何查询每个事件的客户。

提前致谢!

最佳答案

我认为有两种主要的方法可以做到这一点:即时计算距离,以及预先计算一次距离,然后将它们存储在查找表中。

选项 1,即时计算。 Tom van der Woerdt 的回答很好地解释了您将如何执行此操作。伪代码查询是这样的:

SELECT * FROM customer, event WHERE (<calc distance>) < customer.distance

选项 2,预先计算所有距离。您将创建一个表(在此示例中将其称为 distance)来存储每个客户和每个事件之间的距离。它将包含三列:customerideventidmiles(或您想要的任何距离度量)。遍历每个客户,计算到每个事件的距离,并将每个事件存储在 distance 中。每次添加新客户或事件时,您都会将相应的记录添加到 distance 表中。一旦此结构到位,查找事件将非常简单:

SELECT * FROM distance WHERE miles < [[some number you pick]]

那么哪个更好?这是 CPU 时间和磁盘空间之间的权衡,所以答案取决于您的资源。选项 1(即时计算)将需要 DBMS 进行更多工作(更多 CPU 时间)。随着人员和事件数量的增加,该查询将需要更长的时间来运行。选项 2(预先计算距离)将使查找速度非常快,但代价是您必须将所有这些预先计算的距离存储在磁盘上。您还需要努力确保您的查找表是最新的。每次添加、删除客户或事件或更改其纬度/经度时,您都需要相应地更新查找表。 Triggers可以帮助您使这个过程自动化;只需确保您尝试测试每个场景(添加、删除、移动)以确保查找表按预期更新。

简短回答:如果您的数据库负载很小和/或您的磁盘空间有限,请选择选项 1(即时计算)。如果您的负载很重但磁盘空间充足,请选择选项 2。选项 2 是更可能的情况,并且它的可扩展性要高得多。

关于php - 距离查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8434943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com