我正在寻找一些查询的帮助,我很确定这很简单,但我看不到木头的树木,我希望有人可以提供帮助。
我正在搜索用户数据库,计算用户之间的距离并输出结果,如下所示:
$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(唯一),以便我可以计算结果然后运行它们用于输出。
这是否有意义和/或是否有更好的方法。
由于
答案 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)
但纬度和经度不一样
对于经度,一个好的猜测是* * 53
你离赤道越远,这些工作就越少(当然)
是的,USCG认证船长,所以我做了解经度和纬度 - 我们不住在平坦的地球上.....