Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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对象的每一行中嵌套第二个mysql的结果?_Php_Mysql_Json - Fatal编程技术网

Php 如何在JSON对象的每一行中嵌套第二个mysql的结果?

Php 如何在JSON对象的每一行中嵌套第二个mysql的结果?,php,mysql,json,Php,Mysql,Json,我正在执行一个查询,该查询返回注释列表,如下所示: $sQuery = " select cp_comments.*,users.user_login, users.user_url, users.display_name, users.ID as avatar, cp_comments.id as replies from ".$wpdb->prefix."cp_comments cp_comments left join ".

我正在执行一个查询,该查询返回注释列表,如下所示:

$sQuery = "
        select cp_comments.*,users.user_login, users.user_url, users.display_name, users.ID as avatar, cp_comments.id as replies

         from ".$wpdb->prefix."cp_comments cp_comments
            left join ".$wpdb->prefix."users users on users.ID=cp_comments.uid
            where songid='$id'
            order by cp_comments.id asc
    ";
    $result1 = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
然后,我循环遍历结果并编码一个json数组,如下所示:

/*
 * Output
 */
$output = array(

    "comments" => array()

);


while ( $aRow = mysql_fetch_array( $result1, MYSQL_ASSOC ) )
{

    $row = array();

    for ( $i=0 ; $i<count($aColumns) ; $i++ )
    {

        if ( $aColumns[$i] == "playtime" )
        {
            /* Special output formatting for 'playtime' column */
            $row[$aColumns[$i]] = ($aRow[ $aColumns[$i] ]) / $duration * 100;
        }           
        else if ( $aColumns[$i] == "avatar" )
        {
            /* Special output to render Avatar by user id */
            $row[$aColumns[$i]] = commentplayer_get_user_avatar($aRow[ $aColumns[$i] ]);
        }
        else if ( $aColumns[$i] != ' ' )
        {
            /* General output */
            $row[$aColumns[$i]] = $aRow[ $aColumns[$i] ];
        }
    }

    $output['comments'][] = $row;

}

echo json_encode($output);
但是,我需要检索每个注释的“回复”(它们存储在一个单独的表中,并将它们嵌套在同一个JSON对象中)

最终编码的JSON输出如下:-

{ "comments" : [ { "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "More tests....",
        "display_name" : "admin",
        "id" : "26",
        "playtime" : 36.206896551699998,
        "posttime" : "2011-10-08 11:11:55",
        "cid" : "26",
        "songid" : "30",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.songbanc.com/members/admin/"
        "cid": "1",
        "replies" : [ { "cid" : "26",
                        "body" : "test reply",
                        "posttime" : "2011-10-08 11:11:55"
                      }]

      },
我似乎不知道如何将第二个mysql查询的结果嵌套到每一行中(假设存在任何回复)

我希望运行的查询返回给定注释的答复(在两个表中链接为“cid”):-

变量$cid需要根据第一次查询中每行的哪个“cid”动态传递给查询(我希望这是有意义的)

我尝试创建一个包含查询的单独函数,将“cid”作为变量传递给它,但在尝试检索数组时不断返回“null”

我真的被困在这里了,伙计们,真的希望有人能帮助我

编辑:

在完成StuR建议的更改后,很明显我离目标越来越近了,但仍然没有达到预期的效果。我的JSON(假设我正确地实现了他的建议,现在如下所示:-

{ "comments" : [ { "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "comment at 0:48",
        "display_name" : "admin",
        "id" : "2",
        "playtime" : 17.977528089900002,
        "posttime" : "2011-09-28 14:38:41",
        "songid" : "24",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.songbanc.com/members/admin/"
      },
      { "replies" : { "body" : "haha reply",
            "cid" : "2",
            "id" : "1",
            "posttime" : "2011-09-28 15:14:56",
            "uid" : "1",
            "user_login" : "admin"
          } },
      { "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "asdasd",
        "display_name" : "admin",
        "id" : "3",
        "playtime" : 0.74906367041199995,
        "posttime" : "2011-09-28 14:43:11",
        "songid" : "24",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.songbanc.com/members/admin/"
      },
      { "replies" : { "body" : "haha reply",
            "cid" : "2",
            "id" : "1",
            "posttime" : "2011-09-28 15:14:56",
            "uid" : "1",
            "user_login" : "admin"
          } },
      { "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
        "body" : "test",
        "display_name" : "admin",
        "id" : "10",
        "playtime" : 36.329588014999999,
        "posttime" : "2011-10-06 14:15:12",
        "songid" : "24",
        "uid" : "1",
        "user_login" : "admin",
        "user_url" : "http://www.songbanc.com/members/admin/"
      },
      { "replies" : { "body" : "haha reply",
            "cid" : "2",
            "id" : "1",
            "posttime" : "2011-09-28 15:14:56",
            "uid" : "1",
            "user_login" : "admin"
          } }
    ] }
有没有建立在这个基础上

$output['comments'][] = $row;
这是在“注释”下为循环的每一行创建一个嵌套数组,因此在将其编码为JSON之前,您的数组结构如下所示:

$output['comments'][]['id'] = 26;
$output['comments'][]['songid'] = 30;
因此,您希望将答复放入:

$output['comments'][]['replies'] = $replies;
我要做的是将第二个查询放在while循环中,然后执行以下操作:

while ( $replies = mysql_fetch_array( $result2, MYSQL_ASSOC ) )
{
    $output['comments'][$cid]['replies'][] = $replies;
}
在您的第一时间内进行更改:

$output['comments'][] = $row;


谢谢StuR,你的回答肯定是对的,但不幸的是还没有完全正确。我现在返回的答复似乎只是查询的第一行,在while循环的每一行中重复,而且它们没有嵌套在comment对象中,而是似乎被合并了。我不确定我是否在描述这个corre确切地说,我将用我现在得到的JSON副本编辑我的问题。不过,感谢您迄今为止的帮助!如果您使用$cid作为嵌套数组的键,我已经更新了我的答案。然后循环查看您的答复,并将其添加到$output['comments'][$cid]['replays'][]…这应该是可行的…或者更好的做法是对键使用增量值,因为如果您设置['comments'][]和['comments']['replies'],则除非您定义键,否则它将创建两个嵌套数组。完美。非常感谢StuR,非常感谢。这是一个真正粗略而有效的答案。:-)
while ( $replies = mysql_fetch_array( $result2, MYSQL_ASSOC ) )
{
    $output['comments'][$cid]['replies'][] = $replies;
}
$output['comments'][] = $row;
$output['comments'][$cid] = $row;