2012-06-15 25 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東西看起來很複雜,但它是要找到一個英里半徑距離。我認爲,不知何故,這些公式中的'拉特'是以某種方式在列表中列出的?

在此先感謝您的幫助!

+0

你有沒有看着http://stackoverflow.com/questions/431391/php-mysql-how-to-resolve-ambiguous-column-names -in聯接操作? – 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,我沒有任何運氣,還有其他想法? –

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 
相關問題