Anda dapat LEFT JOIN untuk mendapatkan semua data yang Anda butuhkan, saat mengulanginya, Anda hanya perlu berhati-hati tentang cara Anda menangani data mana.
$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);
Tapi :Hanya karena Anda bisa, bukan berarti Anda harus.
Memisahkan tugas ini menjadi dua kueri jauh lebih mudah untuk ditulis dan dibaca. Jadi, jika nanti Anda karena suatu alasan perlu menyentuh bagian kode ini (atau orang lain), dia akan senang Anda memilih pendekatan 2 kueri.
Juga merupakan praktik yang baik untuk membagi tugas, jadi idealnya Anda membuat metode di database-access-layer getAllArticles()
dan satu lagi getCommentsByArticleId($id_article)
. Dengan cara ini Anda dapat mengambil semua komentar, tanpa harus memuat seluruh artikel.