我在 PHP 中有两个周期,我需要将其转换为 smarty 结构。下载包含 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>
问题是。如何从 SQL 转换第一个 id 的第二个循环?
最佳答案
好的,所以你的问题实际上是关于 SQL 的。让我们看看您的询问。第一个看起来像这样:
SELECT *, COUNT(*) AS ph
FROM course
INNER JOIN completed_course ON course.id = completed_course.id_kurz
GROUP BY course.id
我假设(因为我对您的数据库方案一无所知)这将提供类(class)列表和学生人数(也许 - 我不知道 completed_course 中有什么
表)谁完成了它们。正如所写,此查询还将为您提供 completed_course
表中的一些数据,但它可能毫无意义,因为您仅对 course.id
进行分组。
第二个查询是:
SELECT COUNT(*) AS abs
FROM participant
WHERE id_completed_course = {DATA FROM FIRST QUERY}
据推测,此查询旨在为您提供已完成类(class)的参与者总数。为了实现这一点,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
)
请注意,我正在获取第一个查询中选择的值,并将它们作为 IN
子句的一部分。此查询可以显着简化 - 例如,子查询中的 JOIN 实际上只是从 completed_course
表中选择的 ID 值:
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
表中的一项相对应的参与者数量。您可以使用 mysqli
方法检索此数据并将其传递到您的 Smarty 模板。
关于php - 将两个循环转换为 smarty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840823/