0

次のテーブルがあります。

+---------+-----------+      +----------+---------+-------------+
| item_id | item_name |      | image_id | item_id |  image_url  |
+---------+-----------+      +----------+---------+-------------+
|       1 | phone     |      |        1 |       1 | http://url1 |
|       2 | computer  |      |        2 |       1 | http://url2 |
|       3 | keyboard  |      |        3 |       2 | http://url2 |
+---------+-----------+      +----------+---------+-------------+

次の出力を得るには、PDO と json エンコードを使用して php で何をすべきですか:

[
    {
        "item_id":"1",
        "name":"phone",
        "images": [
            {
                "image_id":"1",
                "url":"http://url1"
            },
            {
                "image_id":"2",
                "url":"http://url2"
            }
        ]
    },
    {
        "item_id":"2",
        "name":"computer",
        "images": [
            {
                "image_id":"3",
                "url":"http://url3"
            }
        ]
    },
    {
        "item_id":"3",
        "name":"keyboard",
        "images": []
    }
]

この結果を得るには、 foreachループ内でforeachを使用する必要がありますか?

4

1 に答える 1

0

いいえ、単一のループと単一のSQLクエリを使用します。

まず、SQLクエリは

SELECT im.image_id, im.image_url, im.item_id
       it.item_name
FROM images im 
   LEFT JOIN items it ON it.item_id=im.item_id
ORDER BY im.item_id, im.image_id

そして、あなたのPHP(言い換え)は次のとおりです。

$lastItemId = -1;
$aJson = array();
while ($row = GetNextRow()) {    // Depends on your class
    $itemID = $row['item_id'];
    if (!isset($aJson[$itemID])) {
        $aJson[$itemID] = array('item_id'=$itemID, 'item_name'=$row['item_name'], images=>array());
    }
    $aJson[$itemID]['images'] = array('image_id'=>$row['image_id'], 'image_url'=>$row['image_url']);

}
echo json_encode($aJson);

そこから微調整できるはずですか?

于 2012-08-14T04:46:35.630 に答える