无法以正确的方式从数据库中收集数据

时间:2013-01-26 23:33:53

标签: php android

我有函数getDistance()。 while循环中的函数findDistance()通过使用坐标(纬度 - 经度)计算2个用户之间的距离,并以米为单位返回var $djson$distance是用户第一次提交的字符串,$user_old["distance"]是从$query中的数据库调用的字符串。我希望能够在$matched_names中保存我的数据库中用户的所有名称,if()内的条件为真,关于提交他的新用户的距离总和数据和数据库中的旧数据。问题是$matched_names保存了从数据库调用的第一个名称,并且循环继续多次,甚至没有考虑if()限制。例如,如果在$user中调用的名字是“Mike”,而$user有5行,那么输出将为:Mike,Mike,Mike,Mike,Mike

我认为我在内部工作方式上犯了一些错误......

<?php
public function getDistance($uuid, $name, $distance, $latstart, $lonstart, $latend, $lonend, $gcm_regId) {

    $query = sprintf("SELECT uid, gcm_regid, name, distance,latstart, lonstart, latend, lonend  FROM user_demand WHERE latstart='%s' AND lonstart='%s'",
    mysql_real_escape_string($latstart),
    mysql_real_escape_string($lonstart));
    $user = mysql_query($query);

    $no_of_rows = mysql_num_rows($user);
    $user_old = mysql_fetch_assoc($user);

    while( $user_old = mysql_fetch_assoc($user)) {
        $djson = $this->findDistance($latend,$lonend,$user_old["latend"],$user_old["lonend"] );
        if ($user_old["distance"] + $distance >= $djson) {
            $match = $this ->df->addUserMatch($user_old['gcm_regid'],$user_old['name'],$gcm_regId,$name);
            $matched_names = array_fill(0,$no_of_rows,$user_old['name']);   
            $matched_gcmz = array_fill(0,$no_of_rows,$user_old['gcm_regid']); 
        }
    }

    $registatoin_ids = array($gcm_regId);

    $message = array("names" =>$matched_names,"gcm" => $matched_gcmz);
    $result = $this ->gcm->send_notification($registatoin_ids, $message);
}
?>

1 个答案:

答案 0 :(得分:0)

我通常所做的是,当我要写一些复杂的东西时,就是让它在没有功能的情况下工作,然后将其分解为函数。 通过这种方式解决问题不那么容易混淆和容易。

由于你没有发布你的其他函数而且if语句依赖于该函数的输出,所以很难分辨它在做什么。

另一方面,它可能是您使用$ name和$ user_old ['name']的这一行

$ match = $ this - &gt; df-&gt; addUserMatch($ user_old ['gcm_regid'],$ user_old ['name'],$ gcm_regId,$ name);

我想你会希望它相互匹配。就像$ name = $ user_old ['name']然后添加它,如果没有,做其他事情。