与foreach在php中的问题

时间:2012-11-14 08:39:08

标签: php mysql

我有这个代码,我用它来提取我数据库中存在的所有用户, 然后,我查询每一个,看看他们计算了多少分。 我的问题是,分配了查询点的用户会提取正确的信息,但如果用户没有任何积分,那么所有这些用户都不会出现0分,但会给他们另一个用户的分数。 我的代码出了什么问题?

//here i get all user id's
$query = 'SELECT * FROM users';
    $result = mysql_query($query) or die(mysql_error());
    $id_user = array();
    $phone = array();
    $name = array();
    while($row = mysql_fetch_array($result)){
        $id_user[]=$row['user_id'];
        $phone[]=$row['phone'];
        $name[]=$row['first_name'];
    }
//here i get all points collected for each user
    foreach ($id_user as $user_id) {
    $queryuser ='SELECT SUM(basket_value) as total_sum FROM retailer WHERE user_id="'.$user_id.'"';
    $resultuser = mysql_query($queryuser) or die(mysql_error());
    echo "<table>";
    while($row = mysql_fetch_array($resultuser)){

            $total += $row['total_sum'];
            echo "<tr>";
            echo "<td>";
            echo $total;
            echo "</td>";
            echo "<td>";
            echo $user_id;
            echo "</td>";
            echo "</tr>";
        }
    }
    echo "<table>";

3 个答案:

答案 0 :(得分:1)

您的问题:all those users won't appear 0 points, but another user's points are given to them

因为您需要在$total=0;

之前初始化while($row = mysql_fetch_array($resultuser)){

答案 1 :(得分:0)

您必须在$total循环之前将while重置为0.

当您加入两个表格时,您还可以简化计算:

select u.user_id, u.phone, u.first_name, sum(r.basket_value) as total_sum
from users u
left join retailer r on r.user_id = u.user_id
group by u.user_id, u.phone, u.first_name;

然后,您只需循环一次结果集并保存所有其他查询。

答案 2 :(得分:0)

你忘了在foreach循环中初始化$ total。

foreach ($id_user as $user_id) {
  $total = 0;
  ...