我正在尝试使以下情况发生:
通过使用我的代码(见下文),步骤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的正确数字。
经过数小时试图弄清楚我在做什么的错误,我仍然没有发现任何东西,因此非常感谢您的帮助!我可以用当前的代码来解决该问题,还是可以通过其他方法来实现所需的功能?
答案 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和每个用户编号的总和。