【发布时间】:2014-04-15 20:11:59
【问题描述】:
我无法提出一个涉及项目、类别和用户的相当复杂的查询。所有这些都必须结合在一起,以便选择要监视的给定类别的用户在半径内插入新项目时得到通知。
我已经有了这个查询,用来计算坐标和其他项目之间的距离。
SELECT i.id, ( 3959 * acos( cos( radians(-22.915037) ) * cos( radians( lat ) ) *
cos( radians( lng ) - radians(-43.207169) ) + sin( radians(-22.915037) ) *sin(radians(lat)) ) )*1.6 AS distance
FROM user u, item i
WHERE u.id = i.user_id
)
但我无法将所有内容放在一个 SQL 语句中。让我再解释一下。这有点棘手。
坐标(纬度、经度)在用户表中。用户有物品,物品属于给定的类别。有一个表格(我们称之为监视器),用户可以选择一个类别和一个半径(1、5、10、50 公里等)。
每次插入一个新项目时,我都会将它放在一个单独的表上(我们称之为 NewItems),这样我就可以单独处理它。
我想要的是,每次执行某个进程时,获取NewItems中的所有Item,并检查它们是否与Monitor中监视的Categories匹配,并且在配置的radius范围内,这样我就可以通知每个拥有的用户该类别和半径的监视器。
最后,我需要的只是一个包含 ItemID 和 UserID 的结果集(或表),因此我可以通过电子邮件通知每个用户,告诉他们在他们监控的类别和半径中插入了一个新项目。
关于我的表的更多细节(足以了解应该如何构建查询)。
Users: id, lat, lng
Item: id, user_id, category_id
Category: id, name
Monitor: category_id, user_id, radius
NewItems: item_id, flag_notified
【问题讨论】:
标签: mysql coordinates