gpt4 book ai didi

php - 将 PHP 比较函数应用于 MySQL 表中的所有元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:45 27 4
gpt4 key购买 nike

我正在构建一种算法,该算法采用欧几里得坐标(例如 (-4, 2))并搜索其他坐标的大型数据库表以找到最近的坐标(使用欧几里得距离公式)。目前,我的代码如下所示:

$x = -4;
$y = 2;
$query = mysql_query('SELECT `x`, `y` FROM `myTable`');
$closest = PHP_INT_MAX;
while($row=mysql_fetch_array($query)){
$dist = distFormula($x, $y, $row[x], $row[y]);
if($dist<$closest)
$closest = $dist;
}
echo $closest;

distFormula($x1, $y1, $x2, $y2){
return sqrt(pow($x2-$x1, 2)+pow($y2-$y1, 2));
}

有没有更有效的方法?我的数据库表可能非常大。有什么方法可以在查询中进行比较吗?此外,出于示例的目的,我在这种情况下使用了二维,但实际上我打算使用大量的维度(更长的坐标)。

感谢您的帮助!

最佳答案

是的,您可以在查询中的 MySQL 中进行此类计算。试试这个:

$query = <<<SQL
SELECT * FROM (SELECT $x originX, $y originY, x closestX, y closestY, SQRT(
($x-x)*($x-x)
+ ($y-y)*($y-y)
) dist FROM `myTable`) a ORDER BY dist DESC LIMIT 1
SQL;

确保最后一行是单独的,开头或结尾没有其他字符。

它应该给出结果中 'dist' 列内的距离

这是一个包含 3 个维度的示例...

$query = <<<SQL
SELECT * FROM (
SELECT
$x originX, $y originY, $z originZ,
x closestX, y closestY, z closestZ
SQRT(
($x-x)*($x-x)
+ ($y-y)*($y-y)
+ ($z-z)*($z-z)
) dist FROM `myTable`) a ORDER BY dist DESC LIMIT 1
SQL;

关于php - 将 PHP 比较函数应用于 MySQL 表中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24473781/

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