Я выполняю запрос, который возвращает список комментариев, как показано ниже:Как вложить результаты второго 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 ".$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 как показано на рисунке: -
{ "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/"
},
{ "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "test comment",
"display_name" : "admin",
"id" : "70",
"playtime" : 29.597701149399999,
"posttime" : "2011-10-13 15:51:01",
"cid" : "70",
"songid" : "30",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.songbanc.com/members/admin/"
},
{ "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "Another genius comment....",
"display_name" : "admin",
"id" : "71",
"playtime" : 48.8505747126,
"posttime" : "2011-10-13 15:55:38",
"cid" : "71",
"songid" : "30",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.songbanc.com/members/admin/"
}
] }
Однако мне нужно извлечь «ответы» на каждый комментарий (которые хранятся в отдельной таблице и гнездо их в го один и тот же объект 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"
}]
},
все)
запроса Я хотел бы работать, чтобы вернуть ответы на данный комментарий (связанный как «чид» в двух таблицах) является: -
$sql = "select cp_replies.*,users.user_login, users.user_url, users.display_name, users.ID as avatar
from ".$wpdb->prefix."cp_replies cp_replies
left join ".$wpdb->prefix."users users on users.ID=cp_replies.uid
where cp_replies.cid= $cid
order by cp_replies.id asc";
$result2 = mysql_query($sql, $gaSql['link']) or die(mysql_error());
с переменным $ чида необходимости быть прошедший дин в зависимости от того, какой «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"
} }
] }
Любой строит на этом?
Благодаря Stur, вы определенно на правильном пути, но это не совсем там пока, к сожалению. Теперь я возвращаю ответы, но, похоже, это только первая строка запроса, повторяющаяся для каждой строки цикла while, также они не вложены в объекты комментариев, вместо этого они, похоже, объединяются. Я не уверен, что правильно описываю это, я отредактирую свой вопрос с помощью копии JSON, которую я сейчас получаю. Спасибо за вашу помощь до сих пор! – gordyr
Я обновил свой ответ, если вы используете $ cid в качестве ключа для вложенного массива. А затем проведите через свои ответы и добавьте их в $ output ['comments'] [$ cid] ['replies'] [] ... это должно сработать. – StuR
.. и еще лучше использовать инкрементное значение для ключа, потому что если вы установите ['comments'] [] и ['comments'] [] ['replies'], он создаст два вложенных массива, если вы не определите ключ , – StuR