【问题标题】:Converting two loops to smarty将两个循环转换为 smarty
【发布时间】:2014-04-03 14:31:14
【问题描述】:

我有两个 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 的第二个循环?

【问题讨论】:

  • 查看Smarty FAQ。这是学习 Smarty 的好起点。
  • @Kryten 我试过了。我宁愿将第一个 SQL 查询中的 ID 值作为 WHERE 来获取第二个查询。我实际上有:$mysqli-&gt;query("SELECT *, COUNT(*) AS ph FROM course INNER JOIN completed_course ON course.id = completed_course.id_kurz GROUP BY course.id"); $data = $mysqli-&gt;fetch_all(); $mysqli-&gt;query("SELECT COUNT(*) AS abs FROM participant WHERE id_completed_course = {DATA FROM FIRST QUERY}"); $data2 = $mysqli-&gt;fetch_all();

标签: php mysql templates smarty


【解决方案1】:

好的,所以您的问题实际上是关于 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 模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 2020-12-18
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2014-12-11
    • 2018-02-22
    相关资源
    最近更新 更多