0

MySQLi に多次元配列を返す方法はありますか?

データベースからブログ投稿を選択していて、各投稿に複数のタグがあるとしましょう。私の知識では、私はこれを行います:

$r = $mysqli->query("SELECT * FROM posts");
while ($post = $r->fetch_assoc()) {
   //echo blog posts
    $t = $mysqli->query("SELECT * FROM blog_tags INNER JOIN tags ON tags.id = blog_tags.tag_id WHERE post_tags.post_id = ".$post['id']);
    while($tag = $t->fetch_assoc()){
        //echo tags
    }
}

しかし、私が好むのは、次のようにすることです。

$r = $mysqli->query("SELECT * FROM posts INNER JOIN post_tags ON posts.id = post_tags.post_id INNER JOIN tags ON tags.id = post_tags.tag_id");
while($post = $r->fetch_assoc()){
    //echo post
    foreach($post['tags'] as $tag){
        //echo tags
    }
}

したがって、戻り値は次のようになります。

$posts = array(
    "id" => 1,
    "title" => "Blog post 1",
    "content" => "Lorem ipsum...",
    "tags" => 
        array(
            "tag1", 
            "tag2", 
            "tag3"
        ),
    "posted" => "1-1-2010 11:11:11"
);
4

1 に答える 1

1

と を使用する必要がありGROUP BYますGROUP_CONCAT。タグ名フィールドが呼び出されていると思いますname

SELECT posts.*, GROUP_CONCAT(tags.name) as tagnames FROM posts
INNER JOIN post_tags ON posts.id = post_tags.post_id
INNER JOIN tags ON tags.id = post_tags.tag_id
GROUP BY posts.id

結果explode(",", $t->tagnames)を取得すると、タグの配列を取得できます。

于 2012-11-18T16:51:00.690 に答える