2012-06-15 3 views
0

다소 오랜 시간 동안 쿼리를 처리했는데 그 결과 '# 1052 - Column 필드 목록에서 'lat'가 모호합니다. ' 나는 부분으로 그것을 부러 뜨 렸고 각 부분은 잘 작동하는 것처럼 보이지만 나는 즉시이 오류를 얻는다. 검색어는 다음과 같습니다.# 1052 - 필드 목록의 'lat'열이 마일 반지름 쿼리에서 모호합니다. 이유를 파악할 수 없습니다.

SELECT lesson_requests_global_2.student_name, 
      (3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lat)))) AS distance, 
      lesson_requests_vendor.user_purchased 
    FROM lesson_requests_global_2 
    INNER JOIN 
     (SELECT student_name, 
       MAX(request_date) AS max_request_date 
     FROM lesson_requests_global_2 
     WHERE (3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lat)))) < 30 
     GROUP BY student_name) AS recent_student_lesson_request ON lesson_requests_global_2.student_name = recent_student_lesson_request.student_name 
    AND lesson_requests_global_2.request_date = recent_student_lesson_request.max_request_date 
    LEFT JOIN lesson_requests_vendor ON v.user_purchased = lesson_requests_global_2.student_name 
    WHERE lesson_requests_vendor.user_purchased <> 'bob jones' 
     AND distance < 30 
    ORDER BY distance LIMIT 0 , 20 

긴 COS/RADIANS 항목은 복잡해 보이지만 마일 반경 거리를 찾는 것입니다. 어떻게 든 그 수식 내에서 'lat'가 어떻게 든 열 목록에 있다고 생각합니까?

미리 도움 주셔서 감사합니다.

+0

당신이 http://stackoverflow.com/questions/431391/php-mysql-how-to-resolve-ambiguous-column-names 살펴 보았다 : 당신은 당신이에서를 조회 할 테이블을 지정해야 - 조인 - 조업? – j08691

+0

내 의견을 DonCallisto의 대답을 참조하십시오. 나는이 문제가 여기에 'lat'를 포함하는 마일 반경 공식을 가지고 있다고 생각하지만 lat는 내가 끌어 당기는 테이블의 칼럼이 아니다. 코드의 해당 부분 만 사용하여 회신을 보내 주셔서 감사합니다. –

답변

0

매우 간단합니다.

선택하신 테이블과 같은 테이블에 가입하면 동일한 이름의 열이 두 개 있습니다. 필드 이름 앞에 "테이블 이름"을 넣지 않으면 SQL 오류가 발생합니다.

당신은 같은 것을 수행 할 수 있습니다

SELECT .... FROM lesson_requests_global_2 request 
INNER JOIN 
(SELECT ..... FROM lesson_request_globals_2 .....) 
.... 
WHERE .... 

request.lat

requestlat의 모든 발생을 이름을 변경 이제 테이블 이름의 별칭입니다 : "사실상"처음 당신이에서 선택하고 .

+0

문제는 'lat'라는 단어가 내 테이블과 다르다는 것입니다. Haversine 공식의 일부입니다. 올바르게 이해한다면 거리 계산에만 사용되며 테이블 구조의 일부가 아닙니다. 위의 귀하의 제안을 시도 (request.lat Lat 이름 바꾸기 및 모든 운이 없었어요. 다른 아이디어? –

0

lesson_requests_global_2 및 lesson_requests_vendor와 같은 소리에는 'lat'라는 열이 있습니다.

SELECT lesson_requests_global_2.student_name, 
     (3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lesson_requests_global_2.lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lat)))) AS distance, 
     lesson_requests_vendor.user_purchased 
FROM lesson_requests_global_2 
INNER JOIN 
    (SELECT student_name, 
      MAX(request_date) AS max_request_date 
    FROM lesson_requests_global_2 
    WHERE (3959 * ACOS(COS(RADIANS(30.096595)) * COS(RADIANS(lesson_requests_global_2.lat)) * COS(RADIANS(lng) - RADIANS(- 81.718983)) + SIN(RADIANS(30.096595)) * SIN(RADIANS(lesson_requests_global_2.lat)))) < 30 
    GROUP BY student_name) AS recent_student_lesson_request ON lesson_requests_global_2.student_name = recent_student_lesson_request.student_name 
AND lesson_requests_global_2.request_date = recent_student_lesson_request.max_request_date 
LEFT JOIN lesson_requests_vendor ON v.user_purchased = lesson_requests_global_2.student_name 
WHERE lesson_requests_vendor.user_purchased <> 'bob jones' 
    AND distance < 30 
ORDER BY distance LIMIT 0 , 20 
관련 문제