1

2つのMySQLテーブルがあり、次のSQLステートメントを使用してデータを抽出します。

カテゴリ:SELECT cat_id, cat_name FROM categories

製品:SELECT pro_id, pro_name, pro_category FROM products

もちろん、pro_category外部キーはcat_id

次のJSONデータにアクセスしたいと思います。

"categories":[
    {
        "id": 1,
        "name": "Guitars",
        "products":[
            {
                "id": 1,
                "name": "Fender Statocaster"
            },
            {
                "id": 2,
                "name": "Gibson Les Paul"
            }
        ]
    },
    {
        "id": 2,
        "name": "Basses",
        "products":[
            {
                "id": 3,
                "name": "Fender Jazz Bass"
            },
            {
                "id": 4,
                "name": "MusicMan StingRay"
            }
        ]
    }   
]

したがって、カテゴリの配列と、要素ごとに製品のサブ配列を実行する必要があります(次に、を使用しますjson_encode())。

カテゴリをループして最初の配列を作成するのは非常に簡単ですが、製品のサブ配列を作成する方法に完全に固執しています...これが私のコードです。疑問符は、わからないために停止したポイントです。何をすべきか:

$categories = array();
while ($row_rsCategories = mysql_fetch_assoc($rsCategories)) { 
    $categories[] = array(
        'id' => $row_rsCategories['cat_id'],
        'name' => $row_rsCategories['cat_name'],
        'products' => array(
            ???????
        ),
    );
}

助けてくれませんか?
ありがとう!

4

3 に答える 3

5
$categories = array();
while ($row_rsCategories = mysql_fetch_assoc($rsCategories)) { 

    $product_array = array();
    $product_array_query = mysql_query("SELECT pro_id, pro_name, pro_category FROM products WHERE pro_category = '".$row_rsCategories['cat_id']."'");

    while($product_array_fetch = mysql_fetch_array($product_array_query)) {

       $product_array[] = array("id"=>$product_array_fetch['pro_id'],"name"=>$product_array_fetch['pro_name']);

    }                

    $categories[] = array(
        'id' => $row_rsCategories['cat_id'],
        'name' => $row_rsCategories['cat_name'],
        'products' => $product_array,
    );
}
于 2013-03-23T12:59:24.050 に答える
0
$categories = array();
while ($row_rsCategories = mysql_fetch_assoc($rsCategories)) { 
    $categories[$row_rsCategories['cat_id']] = array(
        'id' => $row_rsCategories['cat_id'],
        'name' => $row_rsCategories['cat_name'],
        'products' => array(),
    );
}

while ($row_rsProducts = mysql_fetch_assoc($rsProducts)) {
    $categories[$row_rsProducts['pro_category']]['products'][] = array(
         'id' => $row_rsProducts['pro_id'],
         'name' => $row_rsProducts['pro_name'],
    );
}
于 2013-03-23T13:03:55.367 に答える
-1

JOINカテゴリ ID で製品を注文するクエリを使用して、製品がカテゴリに属する​​ようにします。結果配列をトラバースして、変更が見られる場合は新しいカテゴリを作成しますcat_id

$db = new PDO($connectionString);

$sql = "SELECT * FROM products t1 LEFT JOIN categories t2 ON t1.pro_category = t2.cat_id ORDER BY t2.cat_id";
$stmt = $db->prepare($sql);
if($stmt->execute())
{
    $rows = $stmt->fetchAll();
    $currentCategory = NULL;
    $categories = array();
    foreach($rows as $r)
    {
        if ($currentCategory == NULL || $r['cat_id' != $currentCategory['id'])
        {
            $currentCategory = array(
                'id' => $r['cat_id'],
                'name' => $r['cat_name'],
                'products' => array();
            );
            $categories[] = $currentCategory;
        }
        $currentCategory['products'][] = array(
            'id' => 'pro_id',
            'name' => 'pro_name',
        )
    }
}
else
{
    var_dump($stmt->errorInfo());
}
于 2013-03-23T13:06:48.833 に答える