我有一个列出所有进程的进程表。它有一个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>";
}
}
}
?>
它工作正常但它列出了类别,即使它们下面没有任何进程。我如何以这样的方式实现,即只有在它们下面有进程时才列出类别?
答案 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'