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

MySQL最近的结果-PHP地理位置循环问题,php,sql,gps,geolocation,coordinates,Php,Sql,Gps,Geolocation,Coordinates,这是我的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()/18

这是我的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个具有相同的坐标。

是否有一种方法可以显示所有行,即使其中一些行具有相同的坐标和相同的距离。。。我也不确定以米为单位的距离是否正确。。每度60纳米,每度1852纳米


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

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

<?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查询之外。。有人有简单的解决方案吗?

您可以使用php进行所有数学计算,忽略查询中的计算以获得良好的性能。您的意思是。。在调用查询之前限制可接受的距离坐标?你有一个例子吗?