我目前有兩個相關的表,一個用於'組',另一個用於'項目'。項目按照關聯的組ID存儲在組中。非常基本的表關係,但不幸的是我的SQL不是很好,所以我不確定什麼是循環遍歷所有組的最佳方式,並且在它們內循環遍歷所有項目,最終得到由它們的組分類的所有項目的列表。如何使用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查詢是一個非常糟糕的主意這就是爲什麼我想優化的代碼,但我的SQL的知識是很不幸漂亮限制在基本的CRUD之外。
我也想能夠不顯示沒有項目的組,但是我不能用這個代碼真正做到這一點。能夠在一個查詢中獲得所有組和關聯項目的最佳方式是什麼,以及能夠僅指定選擇具有關聯項目的組?
感謝您的幫助,但不幸的是,這並不適合我,因爲它似乎選擇沒有項目的組。我還想訂購結果,以便每個組描述都列出一次,並且所有項目都列在該組下。我將如何實現這一目標? – Roy
將LEFT JOIN更改爲INNER JOIN。如果這不起作用,請嘗試右連接。 – jeff