2013-04-04 93 views
0

我在寻找一些帮助查询,我敢肯定的是简单,但我看不到树木,不见森林,我希望有人可以提供帮助。过滤MySQL查询距离计算

我在寻找我的用户数据库,用户计算并输出结果之间的距离如下:

$result = queryMysql("SELECT user FROM $table WHERE x= 'y'"); 
$num = mysql_num_rows($result); 

for ($j = 0 ; $j < $num ; ++$j) 
    { 
    $row = mysql_fetch_row($result); 
    if ($row[0] == $user) continue; 

    $query = "SELECT * FROM $table WHERE user='$row[0]'"; 
    $res=mysql_query($query); 
    $results=mysql_fetch_assoc($res); 
    $userlocation=$results['location']; 
    //run distance function which outputs $distance 
    if($distance <= $maximumdistance) 
    { 
      //echo user info 
    } 

我想要做的是运行距离函数,确定谁返回作为真正的用户是什么,并获得他们的用户ID(唯一),无论是在数组或其他东西,所以我可以计算结果,然后通过它们运行输出。

这是否有意义和/或是否有更好的方法来做到这一点。

谢谢

+0

这是非常低效的。将整个数据库拖入PHP中,然后让PHP执行筛选是没有意义的。这就是为什么你有一个数据库开始。您应该学习如何执行连接的查询并使用SQL'where'子句在数据库中执行您想让PHP执行的操作。 – 2013-04-04 21:45:46

+0

我不得不把他们拉出来,虽然能够计算距离,我不能做任何其他方式,我可以看到 – user2246804 2013-04-04 21:47:13

+0

数据库也可以做数学... – 2013-04-04 21:47:38

回答

0

当你说距离,你说的是地理距离吗?运行距离计算的MySQL比PHP快得多。就我个人而言,这是我会做的。创建一个名为user_distances与领域user_id1另一个表,user_id2,并距离。将user_id1和user_id2放在一起作为主键。

现在,让我们用我们的距离填充该表。我假设你已经拥有最可能基于城市/邮政编码的用户的经度和纬度(如果没有,则可以获得邮政编码数据库)。你会做这样的事情:

INSERT INTO user_distances 
    (user_id1, user_id2, distance) 
SELECT 
    u1.user_id, 
    u2.user_id, 
    (69.172 * SQRT(POW(u1.latitude-u2.latitude, 2) + POW(u1.longitude-u2.longitude, 2))) as `distance` 
FROM 
    users as u1, 
    users as u2 
WHERE 
    u1.user_id != u2.user_id; 

现在,你可以得到很多更加精确与距离计算,这只是一个很简单的例子,粗略估计在英里(先进的算法将采取的距离考虑到地球的形状)。现在你有这个新的表user_distances填充每个用户id对之间的距离,你可以运行简单的查询,如选择在哪里距离< 10.

我希望这可以帮助。我没有测试SQL,但你应该明白了吧:)

0

嗯,只是在距离 latitude1快速说明 - Latitude2 * 69.whatever是罚款

但纬度和经度是不同样

为东经一个很好的猜测是* * 53

你离赤道越去越远,就越这些工作(当然)

是,USCG认证队长,所以我了解经度和纬度 - 我们不住在平坦的地球上.....