2016-02-23 95 views
0

这是我的PHP代码..MySQL的最近成果 - 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每个度数d 1852从NM转换..

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

+1

您可以使用php进行所有数学计算,并忽略查询中的计算以获得良好性能。 –

+0

你是什么意思..在调用查询之前限制可接受的距离坐标?你有一个例子吗? – 120382833

+0

https://www.marketingtechblog.com/calculate-distance/ –

回答

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); 
?> 

但是,我stil不确定移动位置计算到PHP和SQL查询出来..有没有人有一个简单的解决方案?