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