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

时间:2019-03-27 19:25:20

标签: php sql twig

我希望能够显示来自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

2 个答案:

答案 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