0

モデル User、Post、Comment、および Tag があります。

  • ユーザーが投稿を作成します。
  • 投稿には複数のコメントとタグを付けることができます。

各モデルには独自のテーブルがあるため、テーブル「投稿」、「コメント」、および「タグ」があります。コメントには「post_id」と呼ばれる外部キーがあり、タグには「post_tags」と呼ばれる多対多の関係テーブルがあり、そこには「post_id」と「tag_id」の 2 つのフィールドがあります。

以下のようなネストされた配列を取得したい:

  • どの MySQL クエリを実行する必要がありますか?
  • ネストされた配列を取得するには、PHP で結果を変更する必要があると思います。どのように?

ご協力ありがとうございます:-)

    [0] => Array
    (
        [Post] => Array
            (
                [id] => 1
                [title] => First article
                [content] => aaa
                [created] => 2008-05-18 00:00:00
            )
        [Comment] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [post_id] => 1
                        [author] => Daniel
                        [email] => dan@example.com
                        [website] => http://example.com
                        [comment] => First comment
                        [created] => 2008-05-18 00:00:00
                    )
                [1] => Array
                    (
                        [id] => 2
                        [post_id] => 1
                        [author] => Sam
                        [email] => sam@example.net
                        [website] => http://example.net
                        [comment] => Second comment
                        [created] => 2008-05-18 00:00:00
                    )
            )
        [Tag] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [name] => Awesome
                    )
                [1] => Array
                    (
                        [id] => 2
                        [name] => Baking
                    )
            )
    )
    [1] => Array
    (
        [Post] => Array
            (...
4

1 に答える 1

4

3 つのクエリを実行したほうがよいでしょう。

  1. 最初に投稿を取得し (必要に応じてユーザーに参加させます)、次のように保存します。

    $list[$row['post_id']]['Post'] = $row;
    
  2. 次に、すべての投稿コメントを取得し、それらを次のように保存します

    $list[$row['post_id']]['Comment'][$row['comment_id']] = $row;
    
  3. 次に、すべての投稿タグを取得します

    $list[$row['post_id']]['Tags'][$row['tag_id']] = $row;
    

単一のクエリが同じデータを複数回送信することになるため、単一のクエリを使用するよりもはるかに効果的です。

于 2012-07-18T22:30:31.037 に答える