1

これは私が投稿した以前の質問に関連していますが、残念ながら、質問に対する完全な回答が得られなかったため、問題を十分に明確に表現できていないと思います。

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

すべてのグループが一度だけリストされ、各グループのすべてのアイテムがグループの見出しの下に正しくリストされるように、これを変更するにはどうすればよいですか?

4

1 に答える 1

1

このコードで問題が発生した場合はお知らせください。クエリに別のクラスを使用しました。

class tank extends mysqli{
public function curr_group_content($a)
{
    $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";  

        if ($stmt = parent::prepare($query)){
            $stmt->execute(); 
            $meta = $stmt->result_metadata();

            while ( $field = $meta->fetch_field() ) {
                $parameters[] = &$row[$field->name];
            }

           call_user_func_array(array($stmt, 'bind_result'), $parameters);

              while ( $stmt->fetch() ) {
                  $x = array();
                  foreach( $row as $key => $val ) {
                     $x[$key] = $val;
                  }
                  $results[] = $x;
               }       

           return $results;
           $stmt->close();
        }//END PREPARE
        else{trigger_error($this->error, E_USER_NOTICE);}
}
}

$clients = new tank();
$data = array();
$events = $clients->curr_group_content();
$eventscount = sizeof($events);
  for($i=0;$i<$eventscount;$i++){
    $data['item'][] = $events[$i]['item'];
  }
于 2013-09-25T14:54:31.613 に答える