【发布时间】:2014-07-13 18:26:32
【问题描述】:
对于我页面上的结果,我需要按距离对结果进行排序。页面获取用户的当前位置并检索该位置最近的 30 个结果。
在距离顺序旁边,我还想按价格对每个venue 的结果进行排序。
问题是价格订单有效,但距离订单无效。我无法弄清楚我的函数是如何对结果进行排序的,因为它没有结构(有时最接近的结果在最后一个位置,有时在中间,有时在开始,这真的很奇怪)。
我的 SQL 语句如下所示:
$lat = '48.213688';
$lng = '16.408229';
$sql = "SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(venue_address_lat)) * cos(radians(venue_address_lng) - radians('".$lng."')) + sin(radians('".$lat."')) * sin(radians(venue_address_lat)))) AS distance
FROM car_offer JOIN venues_infos ON car_offer.venues_infos_id = venues_infos.venue_id WHERE (3959 * acos(cos(radians('".$lat."')) * cos(radians(venue_address_lat)) * cos(radians(venue_address_lng) - radians('".$lng."')) + sin(radians('".$lat."')) * sin(radians(venue_address_lat)))) < 1.5
AND car_offer.offer_date = CURDATE()
AND venue_address_postcode = 1020
OR car_offer.offer_date = '0000-00-00'
ORDER BY distance, offer_price_small LIMIT 0,30";
数据库中的lat, lng来自谷歌地图,所以应该是准确的。
【问题讨论】:
-
什么没有解决这个问题?您收到错误消息了吗?
-
没有。我得到一个结果列表,但列表的顺序不是按距离,顺序是别的(顺序中没有结构)
-
来自stackoverflow.com/questions/13231167/… 我原以为您会在这里收到错误 1054 - 您在查询的一个表中是否有一个名为 distance 的列?
-
不,我没有。我将查询中的公式命名为“距离”
-
出于兴趣,是不是别名导致了问题?即,如果您在 ORDER BY 子句中重复包含别名的表达式而不是使用别名,您会得到预期的结果吗?
标签: mysql sql google-maps geolocation