PHP 循环数组直到索引改变

标签 php html mysql loops

如何创建一个循环直到索引发生变化的 php 循环? 例如,如果索引是Student,数据列是该学生注册的所有类(class),我如何在当前学生旁边显示每个类(class),然后转到下一个学生并显示该学生的所有类(class)等等? 我完全陷入困境,我只需要一个想法来帮助开始。 我相信我需要一个 foreach 或 while 循环,即在 Student_id 未更改时显示类(class)。或者类似的事情,我已经被困在这里好几天了。我还有一个以一对多方式显示每个学生数据的元素,但是,由于这是一个多对多表,我为每个学生的类(class)创建了一个完整的单独表。

$get_student = "select * from students";

    $run_student = mysqli_query($Conn, $get_student);

    while($row_product=mysqli_fetch_array($run_student)){

        $student_id = $row_product['ID'];
        $student_name = $row_product['Name'];
        $student_code = $row_product['Code'];
        $student_image = $row_product['Image'];


        echo "
    <div class='' id='' >$student_id $student_name $student_code</div>
<br><br><br><br>
";}

基本上,我想从第二个表(包含类(class)的表)进行调用,并将它们与其他信息一起列在 div 中。 该表如下所示

ClassTable
ID-------Class
1--------101
1--------131
2--------555
3--------225
3--------146
3--------269

我真的需要有关如何开始这里的帮助,任何有关从哪里开始的帮助都会非常有帮助。

编辑: 好的,对于第一个表(一对多),结构是

ID(PK)
Name(index)
Code
Image 

第二个(多对多)结构是:

TABLEID(PK)
Student_ID(index)
Student_Name(index)
Course

我在 phpmyadmin 设计器中在 ID 和 Student_ID 以及 Name 和 Student_Name 之间建立了关系。

我希望这能澄清结构。

编辑2

按照建议,我对上面的 php 代码进行了编辑:

    /*$get_student = "select * from inventory";*/
        $get_student = "SELECT s.ID, S.Code, s.Name,
(
SELECT
  GROUP_CONCAT(c.Course SEPARATOR ', ')
from
  mydatabase.coursetable c
where
  c.Student_ID = s.ID
) as courses
FROM mydatabase.studenttable s" ;

但是,我收到以下错误

 mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\...

最佳答案

我建议您改进查询,例如这样。

$query_string = 
"SELECT s.ID, S.Code, s.Name,
(
SELECT
  GROUP_CONCAT(c.Course SEPARATOR ', ')
from
  yourdatabase.coursetable c
where
  c.Student_ID = s.ID
) as courses
FROM yourdatabase.studenttable s
ORDER BY s.ID ASC 
";
//Added ORDER BY to order the students from first id to last.

$actual_query = mysqli_query($conn,$query_string);

while($result = mysqli_fetch_assoc($actual_query)){
//do stuff with the result array
}

你最终应该得到像这样的数组:

$结果
[ID] => (1)

[代码] => (XY35XS)

[姓名] =>(无名氏)

[类(class)] => (101, 102, 103)

所以现在你可以像以前那样通过 foreach 或一段时间循环它。

稍微编辑了我的建议以包含 mysqli 部分。

关于PHP 循环数组直到索引改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51979265/

相关文章:

javascript - Google Maps Api-3 里面输入地址

php - 如何将带逗号的字符串插入MYSQL

html - 强制一个元素低于另一个元素?

mysql - 我想向我的sql、两个表提交两个查询?

php - Laravel belongsTo - 指定字段

php - 在虚拟名册上对用户进行分组

javascript - 解析php字符串中的多个值

php - SQL 查询以从通配符列等于值的所有表中选择所有行

javascript - 将 contenteditable HTML 复制到 iframe

javascript - 当 $DisplayPieces 设置为 2 时,JSSOR 缩略图导航器转到错误的幻灯片