Php 如何在Twig HTML表中显示递归SQL查询中的分组数据?

Php 如何在Twig HTML表中显示递归SQL查询中的分组数据?,php,sql,twig,Php,Sql,Twig,我希望能够显示SQL数据库中的数据(使用PDO)并将其显示在HTML表中,但是,我在理解如何在原始查询的结果中包含子查询时遇到了困难。通过使用GROUP_CONCAT函数将数据分组为逗号分隔的值,我已经接近了预期的结果 使用Twig用所需的值填充HTML表,但我不知道如何在学生下面对某些值(课程名称)进行分组 `PHP SELECT classes.ID, classes.PIDM, classes.fName, classes.lName, classes.advisorOneFirst, c

我希望能够显示SQL数据库中的数据(使用PDO)并将其显示在HTML表中,但是,我在理解如何在原始查询的结果中包含子查询时遇到了困难。通过使用GROUP_CONCAT函数将数据分组为逗号分隔的值,我已经接近了预期的结果

使用Twig用所需的值填充HTML表,但我不知道如何在学生下面对某些值(课程名称)进行分组

`PHP
SELECT classes.ID, classes.PIDM, classes.fName, classes.lName, classes.advisorOneFirst, classes.advisorOneLast, classes.advisorOneEmail, 
GROUP_CONCAT(classes.courseTitle) AS courses
FROM classes
WHERE term = :cterm AND (classes.MGrade = "F" OR classes.MGrade = "F~" OR classes.MGrade = "D" OR classes.MGrade = "D~")
GROUP BY classes.ID
ORDER BY lName ASC

`HTML
{% for student in classes %}
<tr>
<td>{{student.fName}}</td>
<td>{{student.courses}}</td>
</tr>
{% endfor %}
我希望它看起来像这样:

student1 course1,course2
student2 course3,course4
student1 course1
         course2
student2 course3
         course4
{% for student in classes %}
<tr>
    <td>{{ student.fName }}</td>
    <td>
    {% for course in student.courses|split(';') %}
        {{ course }}<br>
    {% endfor %}
    </td>
</tr>
{% endfor %}
此外,使用

GROUP_CONCAT(classes.courseTitle SEPARATOR "<br>")
GROUP\u CONCAT(classes.courseTitle分隔符“
”)
或任何其他替代导致:

student1 course1<br>course2
student2 course3<br>course4
学生1课程1
课程2 学生2课程3
课程4
Twig会自动转义变量以防止XSS攻击,这就是为什么使用

标记不起作用的原因。使用
组\u CONCAT(classes.courseTitle SEPARATOR“
,更新您的小枝以使用过滤器:

你的小枝会这样:

student1 course1,course2
student2 course3,course4
student1 course1
         course2
student2 course3
         course4
{% for student in classes %}
<tr>
    <td>{{ student.fName }}</td>
    <td>
    {% for course in student.courses|split(';') %}
        {{ course }}<br>
    {% endfor %}
    </td>
</tr>
{% endfor %}
{%用于班级%}
{{student.fName}
{学生课程中的课程为%。课程|拆分(“;”)%}
{{course}}
{%endfor%} {%endfor%}
给定一个通用表格:

 myTable
=========
foo | bar
----+----
foo1|bar1
foo2|bar2
foo1|bar3
foo2|bar4
SQL

HTML


我明天才能测试这个,但是谢谢你的帮助!肯定会使用更安全的第二种方法。有什么理由不使用不带分隔符的| split(',');'或者你只是想避免像“本世纪中后期的历史”这样的边缘案例?@user19550是的,我使用分号是因为它看起来是一个更安全的字符。您使用的字符取决于您的数据。你应该使用一些永远不会出现在课程标题中的东西。如果需要,您还可以使用多个字符,例如测试了
~
,并做了一个小改动:{课程中课程的%}拆分(“;”)%}应该是{学生中课程的%。课程{拆分(“;”)%}标记为已回答@user19550I谢谢你的更新,我已经用你指出的小修正更新了答案。仅供参考,你应该接受这个答案,让未来的读者知道这是正确的答案。
foo1 bar1
     bar3
foo2 bar2
     bar4