처음 게시 할 때 모범 사례를 따르려고합니다.MySQL 컬럼 데이터 그룹화
사용자 위치를 측정하는 MySQL 쿼리를 작성하려고합니다 (위도와 경도는 각각 $Lat
과 $Lng
). 쿼리는 사용자에게 가장 가까운 50 개의 스테이션을 반환해야합니다.
문제는 내 테이블의 데이터에 각 스테이션의 위치가 포함되어 있으며 입구 당 입구에만 스테이션 당 가장 가까운 스테이션 입구가 필요합니다!
- 는 ID, 위도, LNG, 역의 운행 데이터와 경로
- 를 선택 :
SELECT id, lat, lng, station_name, routes, (3959 * acos(cos(radians($Lat)) * cos(radians(lat)) * cos(radians(lng) - radians($Lng)) + sin(radians($Lat)) * sin(radians(lat)))) AS distance FROM subway_stations ORDER BY distance LIMIT 0 , 50;
위 MySQL의 쿼리는 다음과 수행 :
이
내 쿼리입니다 각 스테이션의 lat 및 lng를 사용자의 Lat 및 lng로 측정 - 해당 데이터를 '거리'로 저장 - 반환 50 개 가까운 결과 나는 이러한 결과 함께 역 당 하나의 레코드가 반환되도록 그룹에 필요
, 사용자에게 가장 가까운 역 입구 거리 열에서 가장 낮은 값을 가진 하나 .
나는 GROUP BY
을 사용해 보았지만 반환 된 결과가 원하는 것이 아니기 때문에 잘못 구현 한 것 같습니다.
'station_name, id, lat, lng의 그룹'을 쿼리에 추가하면 기본적으로 그룹화하지 않는 것과 동일합니다. –
나는'station_name'이 유일하게'id','lat','lng'을'id'를 가능한 기본 키로 정의했다고 가정했습니다. 그러나 '이드'와 같은 원래 질문을 다시 읽는 것은 아마도 개인의 입장을 나타낼 것입니다. 그래서 네 말이 맞을거야. 나는 다시 생각하고있어. – Pursuit
@Sam 귀하의 답변이 정확합니다. 원래의 질문에 답하기 위해'order by'와'limit' 절을 추가하기 만하면됩니다. (내 평판이 아직 충분하지 않아서 당신의 질문에 대해이 의견을 기재 할 수 없습니다). – Pursuit