将两个循环转换为smarty

时间:2014-04-03 14:31:14

标签: php mysql templates smarty

我在PHP中有两个循环,我需要转换为智能结构。 Down包括PHP代码。

代码:

<pre>
$query = mysqli_query($cnn, "SELECT *, COUNT(*) AS ph FROM course INNER JOIN completed_course ON course.id = completed_course.id_course  GROUP BY course.id");

while ($row = mysqli_fetch_array($query)){ 
    <tr> <td> <?php echo  $row['id']; ?></td><td> <?php echo  $row['nazev']; ?  </td><td>
    ?php echo  $row['ph']; ?  </td> <td>
    ?php
    $Number_of_graduates = mysqli_query($cnn, "SELECT COUNT(*) AS abs FROM  participant where id_completed_course = $row[id]");
    while ($rAbs = mysqli_fetch_array($Number_of_graduates)){
    echo $rAbs['abs'];
} ?

</td>
</pre>

问题是。如何转换第一个id来自SQL的第二个循环?

1 个答案:

答案 0 :(得分:2)

好的,所以你的问题实际上是关于SQL的。我们来看看你的问题。第一个看起来像这样:

SELECT *, COUNT(*) AS ph
FROM course
    INNER JOIN completed_course ON course.id = completed_course.id_kurz
GROUP BY course.id

我假设(因为我对你的数据库方案一无所知)这会给出一个课程列表和学生人数(也许 - 我不知道{{1}中有什么内容表)谁完成了它们。如上所述,此查询还会为您提供completed_course表中的一些数据,但由于您只对completed_course进行分组,因此它可能毫无意义。

第二个查询是:

course.id

据推测,此查询旨在为您提供已完成课程的参与者总数。为了实现这一目标,SELECT COUNT(*) AS abs FROM participant WHERE id_completed_course = {DATA FROM FIRST QUERY} 子句可能如下所示:

WHERE

请注意,我正在获取第一个查询中选择的值,并使它们成为SELECT COUNT(*) AS abs FROM participant WHERE id_completed_course IN ( SELECT course.id FROM FROM course INNER JOIN completed_course ON course.id = completed_course.id_kurz ) 子句的一部分。此查询可以显着简化 - 例如,子查询中的JOIN实际上只是IN表中选定的ID值:

completed_course

如果您完全删除子查询并将参与者加入SELECT COUNT(*) AS abs FROM participant WHERE id_completed_course IN ( SELECT id_kurz FROM completed_course ) 表,那么查询实际上会更有效。

completed_course

最后一个查询将为您提供一个值:SELECT COUNT(*) AS abs FROM participant INNER JOIN completed_course ON participant.id_completed_course=completed_course.id_kurz 值对应id_completed_course表中项目的参与者数量。您可以使用completed_course方法检索此数据并将其传递给Smarty模板。