来自查询的PHP 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.DiscussionId 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.
[
{
"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循环