これは私が投稿した以前の質問に関連していますが、残念ながら、質問に対する完全な回答が得られなかったため、問題を十分に明確に表現できていないと思います。
1 つは Groups と呼ばれ、もう 1 つは Items と呼ばれる 2 つのテーブルがあります。私がやりたいのは、すべてのグループを選択してから、各グループ内ですべてのアイテムを選択することです。これにより、次のようになります。
見出し 1 <- グループ
- 1 <- アイテム
- 2 <- アイテム
見出し 2 ←グループ
- 1 <- アイテム
- 2 <- アイテム
私の元の投稿では、最初にこれを達成するために使用したコードを見ることができます。これは基本的に、最初にすべてのグループを選択し、次にグループ内のすべてのアイテムを選択するループ内のループでした。SQL クエリ ループ内に SQL クエリ ループを配置するのはよくないことだとわかっているので、役に立つ SO メンバーのおかげで、次のコードが得られました。
$query = "SELECT g.ID AS GRPID, g.Description AS GrpDesc,i.ID AS ITEM_ID, i.Description AS ItemDescription
FROM Groups_Inv g
LEFT JOIN Items_Inv i
ON g.ID=i.grpID
ORDER BY g.SortNum ASC";
try {
$result = odbc_exec($connect,$query);
if($result){
while ($groups = odbc_fetch_array($result)) {
echo "<li title='".$groups['GrpDesc']."' class='category'>
<h3><span><a class='category'>".$groups['GrpDesc']."</a></span></h3>
<ul class='sub-menu'>\n";
echo "<li class='select'>
<input type='radio' class='addRow'>
<label for='".$groups['ITEM_ID']."'>
".$groups['ItemDescription']."
</label>
</li>\n";
echo "</ul>
</li>\n";
}
}
else {
throw new RuntimeException("Failed to connect.");
}
}
これにより、対応するアイテムを持つすべてのグループが選択されますが、グループ ヘッダーの下にすべてのアイテムがグループ化されるわけではないため、次のような結果になります。
見出し 1
- 1
見出し 1
- 二
すべてのグループが一度だけリストされ、各グループのすべてのアイテムがグループの見出しの下に正しくリストされるように、これを変更するにはどうすればよいですか?