MySQL: запрос на создание объекта JSON с массивом

Хорошо, у меня есть простой вопрос … У меня есть база данных с двумя таблицами:

Статьи (id, content, title, date)

Комментарии (id_article, имя пользователя, контент)

И я хочу получить массив JSON следующим образом:

[ { "id": "5785634a87c5a0075bf211de", "title": "Elita", "content": "Commodo ea enim dolor enim adipisicing ut mollit .", "date":"15July2016" "comments": [ { "username": "Tran", "content": "Ea aliqua sit fugiat adipisicing." }, { "username": "Noreen", "content": "Commodo qui ea nulla est officia. non." }, { "username": "Gilliam", "content": "Esse cupidatat adipisicing sit minim." } ] } ] 

Итак, мой вопрос … Возможно ли только с одним запросом? 🙂 Спасибо вам

Вы можете ЛЕВАЯ ВСТУПИТЬ, чтобы получить все данные, которые вам нужны, при повторении этого вам просто нужно позаботиться о том, как вы обрабатываете данные.

 $lastArticleId = null; $comments = []; $elements = []; $sql = 'SELECT Articles.*, Comments.content AS comment, Comments.username FROM Articles LEFT JOIN Comments ON Articles.id = Comments.id_article'; $result = $pdo->query($sql); foreach ($result->fetchAll(PDO::FETCH_OBJ) as $dataset) { if($lastArticleId !== $dataset->id){ $lastArticleId = $dataset->id; $elements[$lastArticleId] = [ 'id' => $dataset->id, 'title' => $dataset->title, 'content' => $dataset->content, 'date' => $dataset->date, 'comments' => [], ]; } $comments[$lastArticleId][] = [ 'content' => $dataset->comment, 'username' => $dataset->username, ]; } foreach ($elements as $key => $article) { $article['comments'] = $comments[$key]; $fullData[] = $article; } echo json_encode($fullData); 

Но : Просто потому, что вы можете, это не значит, что вы должны.

Расщепление этой задачи в двух запросах намного легче писать и читать. Поэтому, если вам по какой-то причине нужно коснуться этой части кода (или кого-то еще), он будет рад, что вы выбрали подход с двумя запросами.

Также полезно разбить задачи, поэтому в идеале вы бы создали методы на вашем уровне доступа к базе данных getAllArticles() и еще один getCommentsByArticleId($id_article) . Таким образом, вы можете получить все комментарии, не загружая всю статью.

В конце вам нужно будет сделать 2 запроса, -.- '

Здесь будет PHP-код (например, getJSON.php):

 $array = []; $sql = 'SELECT * FROM Articles'; $q = mysql_query($sql) or die ("Error in $sql: ".mysql_error()); while ($rs = mysql_fetch_object($q)) { $element = [ 'id' => $rs->id, 'title' => $rs->title, 'content' => $rs->content, 'date' => $rs->date, 'comments' => [], ]; $sql2 = 'SELECT * FROM Comments WHERE id_article = '.$rs->id; $q2 = mysql_query($sql2) or die ("Error in $sql2: ".mysql_error()); while ($rs2 = mysql_fetch_object($q2)) { $comment = [ 'username' => $rs2->username, 'content' => $rs2->content, ]; $element['comments'] = $comment; } $array[] = $element; } echo json_encode($array); 

И это может быть как вызов jQuery или Javascript для получения JSON, сгенерированного в PHP-скрипте:

 jQuery.getJSON('getJSON.php', {}, function (data) {} 

И хорошо, тогда остальное у вас уже есть, я думаю …

Надеюсь, это вам помогло. Дай мне знать! И удачи! 😉