MySQL 最近的结果 - PHP 地理位置循环问题


MySQL nearest results - PHP geolocation loop issues

这是我的php代码。

<?php
$db = mysqli_connect('','','','');
$lat = "40.3828192";
$lon = "10.7234345";
$check = mysqli_query($db,"SELECT * ,(3956 * 2 * ASIN(SQRT( 
POWER(SIN(($lat    - mlat) *  pi()/180 / 2), 2) +COS( $lat * pi()/180) *
COS(mlat * pi()/180) * POWER(SIN(( $lon - mlon) * pi()/180 / 2), 2) )))
AS distance FROM org HAVING distance < 50 ORDER BY distance ASC LIMIT 100");
$rowi = mysqli_fetch_array($check);
if ($rowi == 0) {       
echo "No results nearby!"; 
} 
else {
while($row=mysqli_fetch_array($check))
{
$distance= $row['distance'] * 60 * 1852;
echo $row['oname']; echo " - "; echo $distance; echo "<br>";
    };
};
mysqli_close($db);
?>

我遇到的问题是循环中的重复结果不显示。.我目前正在尝试按最接近的顺序显示所有数据库行。我目前有 4 个,但只有 3 个显示,因为其中 2 个具有相同的坐标。

有没有办法显示所有行,即使有些行具有相同的坐标和相同的距离......我也不确定以米为单位的距离是否正确。我每个学位有 60NM,从 NM 转换有 1852 纳米。

实际问题是,与我们正在检查的坐标相同的第一行($lat,$lon)没有列出。当检查具有相同坐标的其他行(复制)时,它们以距离 0 正确返回。问题出在哪里?

问题是我已经使用了两次 fetch 数组,第一次是检查它,然后列出行。第一排就这样不见了。我已经用num_rows替换了它,它现在可以工作了。

<?php
$db = mysqli_connect('','','','');
$lat = "40.3828192";
$lon = "10.7234345";
$check = mysqli_query($db,"SELECT * ,(3956 * 2 * ASIN(SQRT( 
POWER(SIN(($lat    - mlat) *  pi()/180 / 2), 2) +COS( $lat * pi()/180) *
COS(mlat * pi()/180) * POWER(SIN(( $lon - mlon) * pi()/180 / 2), 2) )))
AS distance FROM org HAVING distance < 50 ORDER BY distance ASC LIMIT 100");
$rowi = mysqli_num_rows($check);
if ($rowi == 0) {       
echo "No results nearby!"; 
} 
else {
while($row=mysqli_fetch_array($check))
{
$distance= $row['distance'] * 60 * 1852;
echo $row['oname']; echo " - "; echo $distance; echo "<br>";
    };
};
mysqli_close($db);
?>

但是,我不确定将位置计算移动到php和sql查询之外。有人有一个简单的解决方案吗?