현재 두 개의 관련 테이블이 있는데, 하나는 '그룹'이고 다른 하나는 '항목'입니다. 항목은 연관된 그룹 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으로 변경하십시오. 그래도 작동하지 않으면 RIGHT JOIN을 시도하십시오. – jeff