Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:Заявка за създаване на JSON обект с Array

Можете да LEFT JOIN, за да получите всички данни, от които се нуждаете, когато ги итерирате, просто трябва да внимавате как обработвате кои данни.

$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);

Но :Това, че можете, не означава, че трябва.

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

Също така е добра практика да разделяте задачите, така че в идеалния случай бихте създали методи във вашия слой за достъп до база данни getAllArticles() и още един getCommentsByArticleId($id_article) . По този начин можете да извлечете всички коментари, без да се налага да зареждате цялата статия.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте Access или MySQL като бекенд база данни

  2. Предупредителен код на Mysql 1592 Небезопасно изявление, записано в двоичния дневник, използвайки формат на изявление

  3. извличане на подниз от колоната на mysql с помощта на регулярен израз

  4. Вземете ред с най-висока или най-ниска стойност от GROUP BY

  5. Пуснете колона от голяма маса