php,json_encode,嵌套数组带有一个“左连接”查询

时间:2011-12-15 14:59:44

标签: php mysql json

我有一个带有相应“评论”表的“帖子”表(每个“评论”行都有一个'post_id',它与'post'表格相关)。

这是我的函数,它从我的查询中回复了我的JSON响应:

function echo_json_result($result) {

$arr = array();

while($row = mysql_fetch_assoc($result)) {

$arr[] = $row;

}

echo json_encode($arr);

}

这目前吐出一大阵。

为了提高响应的可读性,我希望将与这些“帖子”相关的“评论”作为嵌套数组返回..

我可以想到一种方法来做到这一点。创建两个查询,一个用于注释,另一个用于与注释相关的所有注释。然后,将包含所有注释的关联数组添加到notes数组,然后添加json_encode。

这是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

尝试这样的事情,但帖子需要在你的评论之前出现在结果中:

function echo_json_result($result) {

    $arr = array();

    while ($row = mysql_fetch_assoc($result)) {
        if( $row['post_id'] != "" )
        {
             if( array_key_exists("comments", $arr['post_id']) )
             {
                 array_push($arr['post_id']['comments'], $row);
             }
            else
            {
                 $arr['post_id']['comments'] = array($row);  
            }
        }
        else
        {
            $arr[$row['id']] = $row;
        }
    }

    echo json_encode($arr);

}

答案 1 :(得分:0)

这是ORM可以做的工作。我举例说a bunch of class做的工作没有深度限制。提供了映射字段和所需嵌套数组的数组参数:

例如:

  

SELECT article.name,article.id as id,comment.id as comment_id,comment.value FROM article JOIN comment on comment.article_id = article.id

和相应的映射数组:

$mapping = [ 'id', 'name', 'comments' => ['id','value']];