如何继续添加到此阵列?

时间:2014-07-31 19:06:20

标签: php mysql

我正在运行以下代码,该代码运行查询,获取课程中的所有student_id,然后为每个学生ID获取所有成绩。我的问题是,当数据返回并为第二个,第三个等学生运行for循环时,放入数组的数据不会留在其中。有没有办法将数据保留在数组中并继续添加?我在下面添加了一些代码来帮助绘制图片。全部谢谢

$sql = "SELECT student_id FROM users_table WHERE class_id ='5'";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$row_cnt = mysqli_num_rows($result);
$students = array();

for($y=0; $y<$row_cnt; $y++)
{
    array_push($students, $row['student_id']);

    $sql2 = "SELECT student_grade FROM grades_table WHERE student_id ='".$students[$y]."'";
    $result2 = $db->sql_query($sql2);
    $row2 = $db->sql_fetchrow($result2);
    $row_cnt2 = mysqli_num_rows($result2);

    for($z=0; $z<$row_cnt2; $z++)
    {
         array_push($students, array($row['student_grade']));
    }
}

2 个答案:

答案 0 :(得分:0)

在第二个sql2部分中,你可能想要做这样的事情:

for($z=0;$z<$row_cnt2;$z++) {
   $students[$row['student_id']] = $row['student_grade'];
}

这样做,你的数组不会被覆盖,你会得到这样的东西:

array(
    5 => "A"
    6 => "B"
)

其中5是student_id,A是成绩。

但是,当然,使用JOIN查询Mark Ba​​ker提供的内容也很容易解决。

你写的“更大的查询”是什么?

答案 1 :(得分:0)

你现在正在做的事情会使students阵列看起来像一个大篮子,所有东西都涌入......你应该创建一个索引,然后将grade数组分配给它

$students = array();
for($i = 0; $i < $row_cnt; $i++)
{
    $sql2 = "SELECT student_grade FROM grades_table WHERE student_id ='".$students[$y]."'";
    $result2 = $db->sql_query($sql2);
    $row2 = $db->sql_fetchrow($result2);
    $row_cnt2 = mysqli_num_rows($result2); //probably don't need this count anymore

    $students[$row['student_id']] = $row2;
}

你应该注意到马克的评论......它提供了一种更优雅的方式。另请了解prepared statements and how the help prevent SQL injection