[英]Smarty / PHP: Why is it not possible to use two foreach loops in one table with Smarty?
[英]Converting two loops to smarty
我在PHP中有兩個循環,我需要轉換為smarty結構。 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的第二個循環?
好的,所以你的問題實際上是關於SQL的。 我們來看看你的問題。 第一個看起來像這樣:
SELECT *, COUNT(*) AS ph
FROM course
INNER JOIN completed_course ON course.id = completed_course.id_kurz
GROUP BY course.id
我假設(因為我對你的數據庫方案一無所知),這將給出一個課程列表和學生人數(可能 - 我不知道在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
)
請注意,我正在獲取第一個查詢中選擇的值,並使它們成為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模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.