我正在对一组用户进行查询,这些用户返回特定半径内的用户。用户属于 3 个不同类型的用户组中的 1 个。我需要通过显示来自第 1 组的用户(按距离排序)然后组合来自第 2 组和第 3 组的用户(按距离排序)来对返回列表进行排序。我可以轻松地使用 ORDER BY 子句,但我不知道如何确保第 2 组和第 3 组在结果中组合在一起。
以下语句首先按组 1、2、3 返回用户,并按这些组内的距离排序。我需要返回第 1 组,然后是 2&3,按距离排序。
另外我不确定我是否正确使用了 INNER JOIN,这应该是 LEFT JOIN 吗?
SELECT
SQL_CALC_FOUND_ROWS
a.*,
b.group_id,
ROUND(( 3959 * acos( cos( radians( $lat ) ) * cos( radians( a.latitude ) ) * cos( radians( a.longitude ) - radians( $lon ) ) + sin( radians( $lat ) ) * sin( radians( a.latitude ) ) ) ), 1) AS distance
FROM `users` AS a
INNER JOIN `user_group_map` AS b
ON a.`id` = b.`user_id`
HAVING distance <= $radius
ORDER BY
b.`group_id` DESC,
distance ASC