Bạn có thể THAM GIA TRÁI để nhận tất cả dữ liệu bạn cần, khi lặp lại dữ liệu đó, bạn chỉ cần quan tâm đến cách bạn xử lý dữ liệu nào.
$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);
Nhưng :Chỉ vì bạn có thể, không có nghĩa là bạn nên làm.
Việc tách tác vụ này thành hai truy vấn sẽ dễ viết và dễ đọc hơn rất nhiều. Vì vậy, nếu sau này bạn vì một lý do nào đó cần chạm vào đoạn mã này (hoặc người khác), anh ấy sẽ rất vui vì bạn đã chọn cách tiếp cận truy vấn 2.
Ngoài ra, bạn nên chia nhỏ các nhiệm vụ, vì vậy lý tưởng nhất là bạn nên tạo các phương thức trong lớp truy cập cơ sở dữ liệu của mình getAllArticles()
và một cái khác getCommentsByArticleId($id_article)
. Bằng cách này, bạn có thể tìm nạp tất cả các nhận xét mà không cần phải tải toàn bộ bài viết.