【问题标题】:How do i implement nested foreach with data from mysql?如何使用来自 mysql 的数据实现嵌套 foreach?
【发布时间】:2016-08-31 05:15:20
【问题描述】:

我有一个列出所有进程的进程表。它有一个 processid 的主键。它有一个 cateforyid 列,其中包含进程的 categoryid。我有一个单独的类别表,其中包含 categoryid 和类别名称。

从我的控制器中,我从我的模型中获取所有进程和一个单独的函数来获取所有类别。

然后在我看来,我有这个代码:

<?php
    foreach ($category as $c) {
        echo "<li>" . $c->CategoryName . "</li>";
        foreach ($process as $r) {
            if ($r->CategoryID == $c->CategoryID) {
                echo "<ul>";
                echo "<li>" . anchor("process/id/$r->ProcessID", $r->ProcessName, 'target="_blank"') .  "</li>";
                echo "</ul>";
            }
        }
    }
?>

它工作正常,但它列出了类别,即使它们下没有任何进程。我怎样才能以这样的方式实现,如果它们下有一个进程,它只列出类别?

【问题讨论】:

  • 你能举个例子解释一下吗?
  • 为什么您的流程模型返回没有流程的类别?
  • 检索某个国家的所有进程及其 process.processid、process.processname 和 categoryname 的正确 SQL 命令是什么。目前我使用SELECT process.ProcessID, process.ProcessName, process.CategoryID, category.CategoryName FrOM process, category JOIN process_country ON process_country.ProcessID = process.ProcessID WHERE process_country.CountryCode = 'AM'

标签: php mysql sql database codeigniter


【解决方案1】:

对于SELECT 语句,您应该始终使用明确的JOINs。 从不只在FROM 子句中列出表。您的Category 表还缺少JOIN 标准。相反,请尝试:

SELECT
    P.ProcessID,
    P.ProcessName,
    P.CategoryID,
    CAT.CategoryName
FROM
    Process P
INNER JOIN Category CAT ON CAT.CategoryID = P.CategoryID
INNER JOIN Process_Country PC ON
    PC.ProcessID = P.ProcessID AND
    PC.CountryCode = 'AM'

【讨论】:

  • 只是一个后续问题,一张表是否足以在我的视图中列出每个类别下的类别和流程?
  • 我不确定您在问什么,但如果您还有其他问题,那么您最好将其作为一个新问题打开,而不是尝试在 cmets 中讨论。这将帮助其他有同样问题的人在未来找到它。
【解决方案2】:

ProcessName 不为空放置条件:

<?php
    foreach ($category as $c) {
        echo "<li>" . $c->CategoryName . "</li>";
        foreach ($process as $r) {
            if ($r->CategoryID == $c->CategoryID && isset($r->ProcessName) && strlen(trim($r->ProcessName)) > 0) {
                echo "<ul>";
                echo "<li>" . anchor("process/id/$r->ProcessID", $r->ProcessName, 'target="_blank"') .  "</li>";
                echo "</ul>";
            }
        }
    }
?>

注意:您也可以使用 !empty()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2020-03-09
    • 2016-07-18
    • 1970-01-01
    • 2018-05-13
    • 2019-09-13
    相关资源
    最近更新 更多