0

我正在寻找一些帮助,我很确定这个查询很简单,但我看不到树木的树木,我希望有人能提供帮助。

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

$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(唯一),这样我就可以计算结果,然后通过它们进行输出.

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

谢谢

4

2 回答 2

0

当您说距离时,您是在谈论地理距离吗?MySQL 在运行距离计算方面将比 PHP 快得多。就个人而言,这就是我会做的。创建另一个名为user_distances的表,其中包含字段user_id1user_id2distance。将 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,但你应该明白这一点:)

于 2013-04-05T01:23:32.280 回答
0

嗯,只是关于距离 latitude1 - Latitude2 * 69 的快速说明。随便什么都可以

但是纬度和经度不一样

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

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

是的,美国海岸警卫队认证的船长,所以我确实了解经度和纬度 - 我们不是生活在平坦的地球上......

于 2015-03-24T18:15:04.377 回答