我希望能够显示来自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
此外,使用
GROUP_CONCAT(classes.courseTitle SEPARATOR "<br>")
或任何其他替换结果:
student1 course1<br>course2
student2 course3<br>course4
答案 0 :(得分:1)
Twig自动转义变量以防止XSS攻击,这就是使用CKFetchDatabaseChanges
标记无效的原因。使用<br>
,更新树枝以使用raw过滤器:
GROUP_CONCAT(classes.courseTitle SEPARATOR "<br>")
更新
使用原始过滤器可能会产生其他问题,具体取决于课程中的角色。更好的方法是使用一个可以拆分的字符作为{% for student in classes %}
<tr>
<td>{{student.fName}}</td>
<td>{{student.courses|raw}}</td>
</tr>
{% endfor %}
中的分隔符,然后对该字符进行拆分,然后在树枝中循环遍历。例如,如果您使用分号作为字符分隔符,
您的群组concat如下所示:
group_concat
你的树枝会这样:
GROUP_CONCAT(classes.courseTitle SEPARATOR ';')
答案 1 :(得分:0)
给出了一个广义表:
myTable
=========
foo | bar
----+----
foo1|bar1
foo2|bar2
foo1|bar3
foo2|bar4
SQL
SELECT foo,
GROUP_CONCAT(bar SEPARATOR "@@@") AS bars
FROM myTable
GROUP BY foo
HTML
{% for foobar in myTable %}
<tr>
<td>{{foobar.foo}}</td>
<td>
{% for bar in foobar.bars|split("@@@") %}
{{bar}}<br>
{% endfor %}
</td>
</tr>
{% endfor %}
网页演示
foo1 bar1
bar3
foo2 bar2
bar4