此查詢的工作:MySQL列沒有被發現,儘管被宣佈?
select d.*,
(6371 * 3.1415926 * SQRT((:lat - dl.lat) * (:lat - dl.lat) + COS(:lat/57.2957795) * COS(dl.lat/57.2957795) * (:long - dl.long) * (:long - dl.long))/180) as xdistance
from `dudes` as d
left join `dude_locations` as dl on (dl.id_dude = d.id)
where
(6371 * 3.1415926 * SQRT((:lat - dl.lat) * (:lat - dl.lat) + COS(:lat/57.2957795) * COS(dl.lat/57.2957795) * (:long - dl.long) * (:long - dl.long))/180) <= dl.distance
group by d.id
limit 20
然而,這個查詢拋出一個「列xdistance
未找到」錯誤:
select d.*,
(6371 * 3.1415926 * SQRT((:lat - dl.lat) * (:lat - dl.lat) + COS(:lat/57.2957795) * COS(dl.lat/57.2957795) * (:long - dl.long) * (:long - dl.long))/180) as xdistance
from `dudes` as d
left join `dude_locations` as dl on (dl.id_dude = d.id)
where
xdistance <= dl.distance
group by d.id
limit 20
所有我想要做的就是它,因此同樣的計算ISN」做了兩次。這可能嗎?
任何幫助,將不勝感激。
您的查詢需要一些改進。您正在使用'left join',然後第二個表上的條件將它變成一個'inner join'。你在'select'中有距離計算,但是'group by'不包含這些變量 - 所以你會得到一個不確定的結果。 –
工作查詢爲我提供了我想要的確切結果。你會如何寫它?你可能會創建一個答案,你將如何編寫查詢?我不是想讓你爲我做我的工作,我只是好奇。 – inkd
。 。它可能會給你你想要的結果*現在*。但是,當您使用明確記錄不起作用的功能時(https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html),那麼您將冒着代碼失敗的風險隨時工作。我認爲你可以通過將'distance'計算放在像'min()'這樣的運算符中來修復查詢。 –