遍历数据库行时卡住相同的值

时间:2018-08-06 21:26:06

标签: php loops mysqli

我正在尝试使以下情况发生:

  1. 检索数据库中所有用户的ID值。
  2. 从同一数据库的另一个表中检索属于每个用户的所有号码。
  3. 将属于每个用户的所有号码加在一起。

通过使用我的代码(见下文),步骤1和3正常工作。在步骤2,它循环正确的时间,但是在每个循环中,它从步骤1中检索属于第一个ID的数字。

示例:
步骤1找到以下ID:1、2、3和4。
步骤2循环4次,但是每次都检索属于ID 1的数字,而不是在第一个循环中将其检索到ID 1,在第二个循环中将其检索到ID 2。

我的PHP:

$users_get = mysqli_query($conn,"SELECT id FROM users");
$users_num = mysqli_num_rows($users_get);
$users_list = array();
while($users_row = mysqli_fetch_array($users_get)){
    $users_list[] = $users_row;
}
foreach($users_list as $users_row){
    $users_items[] = array(
        'id' => $users_row['id']
    );
}

for($loop1 = 0; $loop1 < $users_num; $loop1++){
    $numbers_get = mysqli_query($conn,"SELECT number FROM users_numbers WHERE userid = '".$users_items[$loop1]['id']."'");
    $numbers_num = mysqli_num_rows($numbers_get);
    $numbers_list = array();
    while($numbers_row = mysqli_fetch_array($numbers_get)){
        $numbers_list[] = $numbers_row;
    }
    foreach($numbers_list as $numbers_row){
        $numbers_items[] = array(
            'number' => $numbers_row['number']
        );
    }

    $numbers_added = 0;

    for($loop2 = 0; $loop2 < $numbers_num; $loop2++){
        $numbers_added = $numbers_added + $numbers_items[$loop2]['number'];
    }
}

我后来添加了som echos以显示检索到的ID和数字,并得到以下结果:

User ID: 1
Amount of numbers: 4
Numbers:
    4 (Belonging to ID 1)
    7 (Belonging to ID 1)
    5 (Belonging to ID 1)
    2 (Belonging to ID 1)
Total: 18

User ID: 2
Amount of numbers: 0

User ID: 3
Amount of numbers: 3
Numbers:
    4 (Belonging to ID 1)
    7 (Belonging to ID 1)
    5 (Belonging to ID 1)
Total: 16

ID 3的数字数量正确,但是检索到的3个数字属于ID1。

我做的另一观察是,如果我在循环1中编辑SELECT查询,

"SELECT number FROM users_numbers WHERE userid = '".$users_items[$loop1]['id']."'"

并手动选择一个ID,例如:

"SELECT number FROM users_numbers WHERE userid = '3'"

然后,它检索属于ID 3的正确数字。

经过数小时试图弄清楚我在做什么的错误,我仍然没有发现任何东西,因此非常感谢您的帮助!我可以用当前的代码来解决该问题,还是可以通过其他方法来实现所需的功能?

1 个答案:

答案 0 :(得分:1)

根据对我的问题的评论,我得到了以下代码:

$users_get = mysqli_query($conn,"SELECT a.id, SUM(b.number) AS number FROM users AS a INNER JOIN users_numbers AS b ON a.id = b.userid GROUP BY a.id ASC");
$loop1 = 0;

while($users_items[] = mysqli_fetch_array($users_get){
    echo "ID: ".$users_items[$loop1]['id']." - Num total: ".$users_items[$loop1]['number']."<br />";
    $loop1++;
}

while中的回声仅用于测试目的。运行此命令时,它将显示一个不错的列表,其中包含所有用户ID和每个用户编号的总和。