특정 반경 내에서 사용자를 반환하는 사용자 집합에 대해 쿼리를 수행하고 있습니다. 사용자는 3 가지 유형의 사용자 그룹 중 하나에 속합니다. 그룹 1 (거리별로 정렬)에서 사용자를 표시하고 그룹 2에서 사용자를 조합하여 (거리별로 정렬) & 3을 표시하여 반환 목록을 정렬해야합니다. ORDER BY 절을 쉽게 사용할 수는 있지만 그룹 2 & 3이 결과에 함께 결합되어 있는지 확인하는 방법을 모르겠습니다.mysql 문에서 ORDER BY를 사용하고 결과를 그룹화합니다.
다음은 사용자를 그룹 1, 2, 3 순으로 반환하고 해당 그룹 내에서 거리별로 정렬 한 내용입니다. 그룹 1, 그 다음 2 & 3을 거리로 정렬하여 반환해야합니다.
또한 내부 조인을 제대로 사용하고 있는지 확실하지 않습니다. 왼쪽 조인이어야합니까?
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
고맙습니다! 그건 내 프로그램에서 완벽하게 작동했습니다. –