Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL:ऐरे के साथ JSON ऑब्जेक्ट बनाने का अनुरोध

आप अपने लिए आवश्यक सभी डेटा प्राप्त करने के लिए 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. mysql_fetch_array और php में लूप करते समय

  2. दिनांक चर (MySQL और PHP) के साथ टाइमस्टैम्प की तुलना करना

  3. MySQL को AAO मानता है?

  4. संपूर्ण MySQL डेटाबेस के लिए सभी विदेशी कुंजी बाधाओं को देखें

  5. क्या कोई अच्छे कारण हैं जिनका मुझे उपयोग नहीं करना चाहिए - (डैश) MySQL में फ़ील्ड नामों में?