【问题标题】:Ordering SQL results based on distance formula根据距离公式排序 SQL 结果
【发布时间】:2026-02-08 03:35:01
【问题描述】:

不确定该主题是否恰当地描述了我正在尝试的内容,但情况如下。我有一个 x、y 坐标和与之关联的位置的数据库。我想让用户提交带有 x 和 y 坐标的表单数据,并按接近 sqrt((x1-x2)^2 + (y1-y2)^2) 的顺序返回结果。我不确定如何将距离公式应用于要显示的结果集。有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: php sql distance formula


    【解决方案1】:

    真的没那么难。只需将邻近度计算放入 order by 子句中即可。您的 SQL 需要是动态的,以便您可以替换 x 和 y 输入值。我继续并选择了邻近度计算,以便您可以看到排序中使用的值。

    选择位置,sqrt((x-{x 输入值})^2 + (y-{y 输入值})^2) 作为邻近度
    从位置
    按 sqrt((x-{x 输入值})^2 + (y-{y 输入值})^2)

    排序

    【讨论】:

      【解决方案2】:

      平方根函数是单调递增的,所以如果sqrt(a)大于sqrt(b),那么a大于b。因此,如果 SQRT 在您的 SQL 方言中不可用,您可以跳过它:

      ORDER BY (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)
      

      将其添加到 SQL 查询的末尾。

      【讨论】: