gpt4 book ai didi

php - 查找用户附近的事件地点

转载 作者:行者123 更新时间:2023-11-29 23:19:45 25 4
gpt4 key购买 nike

我构建了一个移动应用程序,需要根据当前的纬度和经度(半径 10 英里)来定位周围发生的事件。用户单击事件类型,API 需要搜索距其 10 英里范围内的所有事件。我的数据库的设置方式是每个事件都属于一个 field ,这就是存储纬度和经度的地方。这是我到目前为止的 SQL:

$sql = "SELECT events.*, (3959 * acos(cos(radians(78.3232)) * cos(radians($latitude)) * cos(radians($longitude) - radians(65.3234)) + sin(radians(78.3232)) * sin(radians($latitude)))) AS distance
FROM events
INNER JOIN venues ON events.venue_id = venues.id
INNER JOIN promoters ON events.promoter_id = promoters.id
WHERE type = $type AND end > NOW()
ORDER BY distance";

事件表存储有关事件的信息(名称、描述、开始、结束等),而场所表存储有关地点的信息(名称、地址、纬度、经度等)。我如何加入这些表以确保根据用户的位置检索所需的事件?

最佳答案

我编辑了查询以包含表前缀,这将允许数学从 field 表中提取经纬度列。我根据我的数据库检查了这一点,它也工作得很好。

Bou 不会在您的条件中包含距离参数,使用 HAVING 可以让您在查询条件中包含 distance 列。您的查询可能会返回尚未发生的 $type 的所有事件。我根据我拥有的经纬度用户表检查了这一点,它工作得很好。

看起来您需要更多类似这样的东西(假设您实际上需要所有三个表中的所有列):

SELECT *, acos(cos(radians($userlat)) * cos(radians(`v`.`lat`)) * cos(radians(`v`.`long`) - radians($userlong)) + sin(radians($userlat)) * sin(radians(`v`.`lat`))) * 3959 AS `distance` 
FROM `events` AS `e`
INNER JOIN `venues` AS `v` ON `e`.`venue_id` = `v`.`id`
INNER JOIN `promoters` AS `p` ON `e`.`promoter_id` = `p`.`id`
WHERE `e`.`type` = $type
AND `e`.`end` > NOW()
HAVING `distance` < 25
ORDER BY `distance` ASC
LIMIT 20;

关于php - 查找用户附近的事件地点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429553/

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