我在MySQL中有一个多对多的关系,users
表和posts
表通过第三个post_user
表连接。根据MySQL中连接表的派生值选择单行
这些帖子是在特定位置制作的,经纬度值会记录在每个帖子的旁边。
我想检索所有用户,并为每个用户他们的帖子是最接近给定点(在下面的示例中,坐标43.429124/-0.294401)。我只希望为每个用户提供一个帖子(他们会有很多)。
我已经看过类似的问题/答案,并尝试过各种查询,但还没有能够拿出一个工作很正确。
我目前最好的努力是这个..
SELECT *, (acos(cos(radians(43.429124)) * cos(radians(posts.lat)) * cos(radians(posts.long) - radians(-0.294401)) + sin(radians(43.429124)) * sin(radians(posts.lat)))) AS xdistance
FROM users
INNER JOIN post_user ON users.id = post_user.user_id
INNER JOIN posts ON posts.id = post_user.post_id
INNER JOIN (
SELECT id, MIN(acos(cos(radians(43.429124)) * cos(radians(posts.lat)) * cos(radians(posts.long) - radians(-0.294401)) + sin(radians(43.429124)) * sin(radians(posts.lat)))) AS distance
FROM posts
GROUP BY posts.id
) subposts on posts.id = post_user.post_id AND xdistance = subposts.distance
看到同样的方式来计算:[我为什么要对什么似乎提供了一个MCVE我是一个非常简单的SQL查询?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-tobe -a-very-simple-sql-query) – Strawberry
那么问题是什么? –