gpt4 book ai didi

mysql - SQL ORDER BY 距离无法正常工作

转载 作者:行者123 更新时间:2023-11-30 00:04:18 25 4
gpt4 key购买 nike

对于我页面上的结果,我需要按距离对结果进行排序。该页面获取用户的当前位置并检索该位置最接近的 30 个结果。

除了距离顺序之外,我还想按价格对每个 field 的结果进行排序。

问题是价格顺序有效,但距离顺序无效。我无法弄清楚我的函数如何对结果进行排序,因为它没有结构(有时最接近的结果在最后一个位置,有时在中间,有时在开头,这真的很奇怪)。

我的 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 来自 Google map ,因此这应该是准确的。

最佳答案

我认为在这种情况下你最好使用外部查询,然后执行 order by在外部查询中,如下所示。 (或者)您可以使用相同的 distance order by 中的计算表达式。请注意,我已移动 distance < 1.5从内部查询到外部查询。而且,我怀疑你是否可以使用distance在你的order by子句就像您使用的方式一样(意味着在同一查询级别,除非它来自派生表表达式),因为 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

关于mysql - SQL ORDER BY 距离无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24725870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com