簡體   English   中英

將兩個循環轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM