Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL :Permintaan untuk membuat objek JSON dengan Array

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kinerja MYSQL IN

  2. Penggunaan PDO di kelas

  3. Menampilkan * dalam tabel

  4. Gabungkan Beberapa File Dump Tabel .sql Menjadi Satu File

  5. Urutkan kueri sql &setel ulang ID dan mulai dalam urutan numerik setiap kali saya membuat kueri atau mengurutkan dari tag <th>