SQL ORDER BY distance 无法正常工作
Posted
技术标签:
【中文标题】SQL ORDER BY distance 无法正常工作【英文标题】:SQL ORDER BY distance not working properly 【发布时间】: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
来自谷歌地图,所以应该是准确的。
【问题讨论】:
什么没有解决这个问题?您收到错误消息了吗? 没有。我得到一个结果列表,但列表的顺序不是按距离,顺序是别的(顺序中没有结构) 来自***.com/questions/13231167/… 我原以为您会在这里收到错误 1054 - 您在查询的一个表中是否有一个名为 distance 的列? 不,我没有。我将查询中的公式命名为“距离” 出于兴趣,是不是别名导致了问题?即,如果您在 ORDER BY 子句中重复包含别名的表达式而不是使用别名,您会得到预期的结果吗? 【参考方案1】:我认为您最好在这种情况下使用外部查询,然后在外部查询中执行order by
,如下所示。 (OR) 您可以在 order by
中使用相同的 distance
计算表达式。请注意,我已将 distance < 1.5
从内部查询移至外部查询。此外,我怀疑您是否可以像您使用的方式一样在您的order by
子句中使用distance
(意味着在同一查询级别,除非它来自派生表表达式),因为distance
是一个列别名。
SELECT * FROM
(
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 car_offer.offer_date = CURDATE()
AND venue_address_postcode = 1020
OR car_offer.offer_date = '0000-00-00'
) tab
WHERE distance < 1.5
ORDER BY distance, offer_price_small
LIMIT 0,30
【讨论】:
我认为你最好在order by
中使用相同的distance
计算表达式(或者只使用HAVING
)以上是关于SQL ORDER BY distance 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
mysql 多表 查询 之后 group by 分组 order by 无法按照日期排序
若SQL语句中的ORDER BY短语中指定了多个字段,则( )。