我目前有两个相关表,一个用于“组”,另一个用于“项目”。项目按关联的组 ID 存储在组中。非常基本的表关系,但不幸的是我的 SQL 不是很好,所以我不确定循环所有组的最佳方法是什么,并在其中循环所有项目以最终得到按组分类的所有项目的列表。
目前我有这个代码:
$query = "SELECT ID AS GRPID, Description FROM Groups_Inv ORDER BY SortNum ASC";
try {
$result = odbc_exec($connect,$query);
if($result){
while ($groups = odbc_fetch_array($result)) {
echo "<li title='".$groups['DESCRIPTION']."' class='category'>
<h3><span><a class='category'>".
$groups['DESCRIPTION'].
"</a></span></h3><ul class='sub-menu'>\n";
$subquery = "SELECT ID AS ITEM_ID, Description
FROM Items_Inv WHERE grpID = ".$groups['GRPID']."";
$subresult = odbc_exec($connect,$subquery);
while ($items = odbc_fetch_array($subresult)) {
echo "<li class='sub_item' title='".$items['DESCRIPTION']."'>
<input type='radio' class='addRow'>
<label for='".$items['ITEM_ID']."'>".
$items['DESCRIPTION'].
"</label></li>\n";
}
echo "</ul></li>\n";
}
}
else{
throw new RuntimeException("Failed to connect.");
}
}
catch (RuntimeException $e) {
print("Exception caught: $e");
}
我知道在循环中使用 SQL 查询是一个非常糟糕的主意,这就是我想优化这段代码的原因,但不幸的是,除了基本的 CRUD 内容之外,我对 SQL 的了解非常有限。
我也希望能够不显示没有项目的组,但我不能用这段代码真正做到这一点。能够在一个查询中获取所有组和关联项目以及能够仅指定选择具有关联项目的组的最佳方法是什么?