Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自查询的PHP JSON数组_Php_Sql_Arrays_Json - Fatal编程技术网

来自查询的PHP JSON数组

来自查询的PHP JSON数组,php,sql,arrays,json,Php,Sql,Arrays,Json,我不是php开发人员,但尝试从以下查询获取数组中的数组: 选择distinct d.DiscussionId作为DiscussionId,d.AvatarId作为AvatarId,d.Heading作为Heading,d.body作为body,c.commentid作为commentid,c.userid作为userid,c.comment作为comment 以d的形式进行讨论 内部连接注释为d.discussionid=c.discussionid上的c 其中d.DiscussionId=c.

我不是php开发人员,但尝试从以下查询获取数组中的数组:

选择distinct d.DiscussionId作为DiscussionId,d.AvatarId作为AvatarId,d.Heading作为Heading,d.body作为body,c.commentid作为commentid,c.userid作为userid,c.comment作为comment 以d的形式进行讨论 内部连接注释为d.discussionid=c.discussionid上的c 其中d.DiscussionId=c.DiscussionId

JSON输出为:

[
    {
        "DiscussionId": "1", 
        "AvatarId": null, 
        "Heading": "New discussion heading", 
        "Body": "This is the discussion body", 
        "Comments": [
            {
                "DiscussionId": "1", 
                "CommentId": "1", 
                "UserId": "2", 
                "Comment": "This is a comment i made"
            }
        ]
    }, 
    {
        "DiscussionId": "1", 
        "AvatarId": null, 
        "Heading": "New discussion heading", 
        "Body": "This is the discussion body", 
        "Comments": [
            {
                "DiscussionId": "1", 
                "CommentId": "2", 
                "UserId": "2", 
                "Comment": "This is a second comment"
            }
        ]
    }
]
我需要的是将所有评论嵌套在一个讨论中

下面是php代码,没有错误,但没有给出我想要的输出,对于每个讨论,可能会有几个注释,因此我需要DiscussionId:1仅显示一次,并带有multilple注释数组

$result = mysql_query($query,$link) or die('Errant query:  '.$query);



 $model = array();
 $record = -1;
 $currentWeID = -1;    
 while($e = mysql_fetch_assoc($result)){ 
 $record++;
 $model[] = array();
 $model[$record]['DiscussionId'] = $e['DiscussionId']; 
 $model[$record]['AvatarId'] = $e['AvatarId']; 
 $model[$record]['Heading'] = $e['Heading'];
 $model[$record]['Body'] = $e['Body']; 
 $model[$record]['Comments'][] = array( 

 'DiscussionId'=> $e['DiscussionId'], 
 'CommentId' => $e['CommentId'], 
 'UserId' => $e['UserId'], 
 'Comment' => $e['Comment'] 
 ); 

}


print json_encode ($model); 

仅仅更改SQL查询是不可能的:您需要更改服务器端代码PHP,因为我知道哪些transorms查询结果是JSON

像这样试试:

添加了Discussion Id作为数组的索引,应该适合您。就在我头顶上,没有测试

$result = mysql_query($query,$link) or die('Errant query:  '.$query);
$model = array();
 $record = -1;
 $currentWeID = -1;
 $model = array(); 

 while($e = mysql_fetch_assoc($result)){ 
 $record++;
 $model[$e['DiscussionId']][$record]['AvatarId'] = $e['AvatarId']; 
 $model[$e['DiscussionId']][$record]['Heading'] = $e['Heading'];
 $model[$e['DiscussionId']][$record]['Body'] = $e['Body']; 
 $model[$e['DiscussionId']][$record]['Comments'][] = array( 

 'DiscussionId'=> $e['DiscussionId'], 
 'CommentId' => $e['CommentId'], 
 'UserId' => $e['UserId'], 
 'Comment' => $e['Comment'] 
 ); 

}


print json_encode ($model); 
您正在从一次讨论中选择许多评论。 您应该覆盖该变量,而不是在每次迭代时创建新元素:

 $model = array();  
 while($e = mysql_fetch_assoc($result)){ 
 //We overwrite the same variable, that's ok
 $model['DiscussionId'] = $e['DiscussionId']; 
 $model['AvatarId'] = $e['AvatarId']; 
 $model['Heading'] = $e['Heading'];
 $model['Body'] = $e['Body']; 
 //Only comments would be an array
 $model['Comments'][] = array( 
        'DiscussionId'=> $e['DiscussionId'], 
        'CommentId' => $e['CommentId'], 
        'UserId' => $e['UserId'], 
        'Comment' => $e['Comment'] 
        ); 
}
试试这个:

$result=mysql\u query$query,$link或die'errat query:'。$query

 $model = array();
 $record = 0;
 $currentWeID = -1;    
 while($e = mysql_fetch_assoc($result)){ 
 $model[] = array();
 $model[$record][$e['DiscussionId']]['AvatarId'] = $e['AvatarId']; 
 $model[$record][$e['DiscussionId']]['Heading'] = $e['Heading'];
 $model[$record][$e['DiscussionId']]['Body'] = $e['Body']; 
 $model[$record][$e['DiscussionId']]['Comments'][] = array( 
    'DiscussionId'=> $e['DiscussionId'], 
    'CommentId' => $e['CommentId'], 
    'UserId' => $e['UserId'], 
    'Comment' => $e['Comment'] 
    ); ;
 $record++;
}


print json_encode ($model); 

这可能对你有帮助。如果有帮助,不要忘记接受答案。

根据您尝试过的内容以及错误原因发布代码。这是一条评论而不是答案。感谢您的快速回复,它正在仔细查看,但只返回第二条评论discussion@user3550256现在试试,我留下了$model=array;错误地进入while循环