【问题标题】:Wordpress sql query results vs sql query in phpmyadmin query different orderWordpress sql查询结果与phpmyadmin中的sql查询查询不同的顺序
【发布时间】:2021-04-09 08:52:41
【问题描述】:

我对 wordpress 有点困惑,我有以下查询来计算帖子之间的距离:

public function distance($latitude, $longitude){
    global $wpdb;
    $sql = "SELECT l.post_id,( 6371 * acos( cos( radians($latitude) ) * cos( radians( l.latitude ) ) 
       * cos( radians(l.longitude) - radians($longitude)) + sin(radians($latitude)) 
       * sin( radians(l.latitude)))) AS distance 
    FROM localisation as l
    HAVING distance < 50
    ORDER BY distance ASC";
    $output = $wpdb->get_results($sql, ARRAY_A);
    dump($output) // <--- Here i test the result

}

输出显示从最近到最远(大约 50 公里)的帖子,除了当我复制/粘贴相同的查询时,我没有相同的结果(产品从最近到最远的顺序排列,但不是相同的顺序)

此查询的输出:

post_id. | distance. 
1245       0.25029229952593496
8547       0.25029229952593496
78451      0.25029229952593496
45874      0.4428014744990856

但是来自 phpmyadmin 的输出:

post_id. | distance. 
78451      0.25029229952593496
8547       0.25029229952593496
1245       0.25029229952593496
45874      0.4428014744990856

顺序不一样,连排序都好

你有什么想法吗?为什么我得到不同的订单?

谢谢

【问题讨论】:

  • 由于其中三个记录显示精确相同的距离,您需要添加一个二级订单列以确保它们以相同的顺序返回。没有它,您就不会告诉 MySQL 如何对相同的值进行排序,因此您永远无法假设它们的顺序。

标签: php mysql wordpress


【解决方案1】:

我认为这是因为您应该先按“距离”排序,然后再按“ID”排序。默认情况下,我的管理员按 id 'DESC' 排序,但 wp 按 id 'ASC' 排序, 你应该在你的 wp 查询中尝试这样的事情

ORDER BY distance ASC, ID ASC

ORDER BY distance ASC, ID DESC

【讨论】:

    【解决方案2】:

    订购两列。

    订购方式 post_id ASC,如果你想要第一个结果,距离 ASC

    【讨论】:

    • 应该是相反的。距离第一,身份证第二。否则,它只会按 id 排序(因为没有两个帖子可以有相同的 id,所以它永远不会按距离排序)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2021-09-07
    • 2013-09-07
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多