【发布时间】:2026-02-08 03:35:01
【问题描述】:
不确定该主题是否恰当地描述了我正在尝试的内容,但情况如下。我有一个 x、y 坐标和与之关联的位置的数据库。我想让用户提交带有 x 和 y 坐标的表单数据,并按接近 sqrt((x1-x2)^2 + (y1-y2)^2) 的顺序返回结果。我不确定如何将距离公式应用于要显示的结果集。有什么建议可以解决这个问题吗?
【问题讨论】:
不确定该主题是否恰当地描述了我正在尝试的内容,但情况如下。我有一个 x、y 坐标和与之关联的位置的数据库。我想让用户提交带有 x 和 y 坐标的表单数据,并按接近 sqrt((x1-x2)^2 + (y1-y2)^2) 的顺序返回结果。我不确定如何将距离公式应用于要显示的结果集。有什么建议可以解决这个问题吗?
【问题讨论】:
真的没那么难。只需将邻近度计算放入 order by 子句中即可。您的 SQL 需要是动态的,以便您可以替换 x 和 y 输入值。我继续并选择了邻近度计算,以便您可以看到排序中使用的值。
选择位置,sqrt((x-{x 输入值})^2 + (y-{y 输入值})^2) 作为邻近度
从位置
按 sqrt((x-{x 输入值})^2 + (y-{y 输入值})^2)
【讨论】:
平方根函数是单调递增的,所以如果sqrt(a)大于sqrt(b),那么a大于b。因此,如果 SQRT 在您的 SQL 方言中不可用,您可以跳过它:
ORDER BY (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)
将其添加到 SQL 查询的末尾。
【讨论】: