आप अपने लिए आवश्यक सभी डेटा प्राप्त करने के लिए 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)
. इस तरह आप पूरे लेख को लोड किए बिना सभी टिप्पणियां प्राप्त कर सकते हैं।