【发布时间】:2014-08-19 20:38:11
【问题描述】:
我正在构建一个算法,该算法采用欧几里得坐标(例如 (-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));
}
有没有更有效的方法来做到这一点?我的数据库表可能非常大。有没有办法在查询中进行比较?此外,出于示例的目的,我在本例中使用了二维,但实际上我打算使用大量维度(更长的坐标)。
感谢您的帮助!
【问题讨论】:
-
你可以在db端进行计算,但还是要全表扫描...
标签: php mysql performance algorithm euclidean-distance