过滤MySql查询进行距离计算

时间:2013-04-04 21:41:06

标签: php 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
    }

我想要做的是运行距离函数,将其返回的用户标识为true,并在数组或其他内容中获取用户ID(唯一),以便我可以计算结果然后运行它们用于输出。

这是否有意义和/或是否有更好的方法。

由于

2 个答案:

答案 0 :(得分: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;

现在,你可以通过距离计算得到更精确的数据,这只是一个非常简单的例子,大致估计以英里为单位的距离(高级算法会考虑地球的形状)。现在您已经使用每个用户ID对之间的距离填充了这个新表user_distances,您可以运行简单的查询,例如,选择距离&lt; 10。

我希望这会有所帮助。我没有测试SQL,但你应该明白这一点:)

答案 1 :(得分:0)

嗯,只是一个关于距离的快速记录 latitude1 - Latitude2 * 69.whatever a fine

但纬度和经度不一样

对于经度,一个好的猜测是* * 53

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

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