ORDER BY在尝试通过升序获得距离时不工作[关闭]

问题描述 投票:0回答:1
select * from `users` 
where exists (
    select *, (6371 * acos(cos(radians(22.559648)) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(88.415552)) + sin(radians(22.559648)) * sin(radians(`lat`)))) AS distances 
    from `locations` 
    where `users`.`location_id` = `locations`.`id` 
    and (6371 * acos(cos(radians(22.559648)) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(88.415552)) + sin(radians(22.559648)) * sin(radians(`lat`)))) < 32.688888 
    ORDER BY `distances` DESC)
mysql database mysqli mysql-error-1064
1个回答
2
投票

您需要将ORDER BY放在主查询中。子查询只是用于判断行是否存在,顺序无关紧要。

distances不是主查询中的列,因此您无法使用您编写的查询对其进行排序。您需要加入子查询,而不是使用EXISTS

SELECT u.*, (6371 * acos(cos(radians(22.559648)) * cos(radians(`lat`)) * cos(radians(`lng`) - radians(88.415552)) + sin(radians(22.559648)) * sin(radians(`lat`)))) AS distances 
FROM users AS u
JOIN locations AS l ON `u`.`location_id` = `l`.`id` 
HAVING distances < 32.688888 
ORDER BY distances DESC
© www.soinside.com 2019 - 2024. All rights reserved.