2

MySqlに2つのテーブルがあります

セクション

section_id       name
=====================
1              Section1
2              Section2

カテゴリー

    category_id        section_id     name
    =========================================
    1                  1           Category1
    2                  1           Category2
    3                  2           Category3
    4                  2           Category3

これは私が今持っているものです:

$sections = mysql_query($sql_section) or die("Could not execute query.");
$categories = mysql_query($sql_category) or die("Count not execute query");

$result = array('sectionlist' => array());
    for ($i=0; $i < mysql_num_rows($sections); $i++ ){
        for ($j=0; $j < mysql_num_rows($categories); $j++){
            if (mysql_result($sections,$i,"section_id") == mysql_result($categories,$j,"section_id")){
                $result['sectionlist'][] = array('sectionName' => mysql_result($sections,$i,"name"), 'categorylist' => array(array('category' => mysql_result($categories,$j,"name"))));
            }
        }
    }
echo json_encode($result);

出てきた結果は次のようなものです。

  {sectionlist:[
    {sectionName: "Section1", categoryList: [{categoryName: "category1"}]},
    {sectionName: "Section1", categoryList: [{categoryName: "category2"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category3"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category4"}]},
  ]}

これは私が期待した結果ではありませんでした。次のようなオブジェクトが必要です。

{sectionlist:[
    {sectionName: "Section1", categoryList: [{categoryName: "category1"}, {categoryName: "category2"}]},
    {sectionName: "Section2", categoryList: [{categoryName: "category3"}, {categoryName: "category4"}]}
]}

したがって、セクション 1 をセクション 1 に、セクションをセクション 2 にグループ化するにはどうすればよいでしょうか?

4

2 に答える 2

2

あなたの質問に答えるには、最初にカテゴリの配列を作成します。

for ($i=0; $i < mysql_num_rows($sections); $i++ ){
    $categorylist = array();
    for ($j=0; $j < mysql_num_rows($categories); $j++){
        if (mysql_result($sections,$i,"section_id") == mysql_result($categories,$j,"section_id")){
            $categorylist[] = array('category' => mysql_result($categories,$j,"name");
        }
    }
    $result['sectionlist'][] = array('sectionName' => mysql_result($sections,$i,"name"), 'categorylist' => $categorylist));
}

補足として、PHP は他のデータベース拡張機能の使用を推奨しています

于 2012-08-17T00:26:50.243 に答える
1

@Gregのコメントは、上記に注意することが非常に重要です。また、必要なデータだけを取得するために、結合を使用して単一のクエリとしてクエリを書き直すことをお勧めします。何が必要かは100%正確にはわかりませんが、おそらく次のようになります。

SELECT section.section_id, category.name, section.name FROM category 
  LEFT JOIN section ON section.section_id = category.section_id;

これにより、関連付けられているsection_idとセクション名にキー設定されたカテゴリ名の配列が返されます(必要に応じてcategory_idを選択することもできます)。

于 2012-08-17T00:29:30.300 に答える