如何使用mysql中的数据实现嵌套的foreach?

时间:2016-05-05 12:07:19

标签: php mysql sql database codeigniter

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

process table category table enter image description here

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

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

<?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>";
            }
        }
    }
?>

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

2 个答案:

答案 0 :(得分:0)

放置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()。

答案 1 :(得分:0)

您应始终对JOIN语句使用明确的SELECT从不只列出FROM子句中的表格。您还缺少JOIN表的Category条件。相反,尝试:

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'