sql >> Databáze >  >> RDS >> Mysql

MySQL:Požadavek na vytvoření objektu JSON pomocí Array

Můžete LEFT JOIN získat všechna data, která potřebujete, při opakování se musíte postarat o to, jak s jakými daty nakládáte.

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

Ale :To, že můžeš, neznamená, že bys měl.

Rozdělení tohoto úkolu na dva dotazy je mnohem jednodušší na psaní a čtení. Takže pokud se později z nějakého důvodu budete potřebovat dotknout tohoto kusu kódu (nebo někoho jiného), bude rád, že jste zvolili přístup 2 dotazů.

Také je dobrou praxí rozdělit úkoly, takže v ideálním případě byste vytvořili metody ve vrstvě přístupu k databázi getAllArticles() a další getCommentsByArticleId($id_article) . Tímto způsobem můžete načíst všechny komentáře, aniž byste museli načítat celý článek.



  1. jak zobrazit všechna načtená data z MYSQL

  2. Zkontrolujte, zda Postgresql poslouchá

  3. Agregační pole Postgresql

  4. Obnovení tabulky MySQL zpět do databáze