我在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的第二个循环?
答案 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模板。