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

JSON bersarang dari 3 Tabel satu-ke-banyak

Kode yang dapat dijalankan dengan beberapa contoh data:http://codepad.org/2Xsbdu23

Saya menggunakan 3 SELECT . yang berbeda s untuk menghindari pengulangan yang tidak perlu. Tentu saja Anda harus menyesuaikan $result array ke format JSON yang Anda inginkan, tetapi saya pikir itu tidak terlalu sulit.

// assume $t1/2/3 will be arrays of objects
$t1 = 
SELECT     Table1.*
FROM       Table1 
WHERE Table1.ID = 111

$t2 = 
SELECT     Table2.*
FROM       Table2
WHERE      Table2.table1_ID = 111

$t3 = 
SELECT     Table3.*
FROM       Table2
INNER JOIN Table3 ON Table2.ID = Table3.table2_ID
WHERE      Table2.table1_ID = 111

function array_group_by( $array, $id ){
  $groups = array();
  foreach( $array as $row ) $groups[ $row -> $id ][] = $row;
  return $groups;
}

// group rows from table2/table3 by their parent IDs
$p2 = array_group_by( $t2, 'table1_ID' );
$p3 = array_group_by( $t3, 'table2_ID' );

// let's combine results:
$result = array();
foreach( $t1 as $row1 ){
  $row1 -> Table2_Objects = isset( $p2[ $row1 -> ID ]) ? $p2[ $row1 -> ID ] : array();
  foreach( $row1 -> Table2_Objects as $row2 )
    $row2 -> Table3_Objects = isset( $p3[ $row2 -> ID ]) ? $p3[ $row2 -> ID ] : array();
  $result[] = $row1;
}

echo json_encode( $result );



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. konektivitas database gagal setelah membuat file jar

  2. Perlukah keluar dari input pengguna dari database?

  3. Replikasi dari MySQL ke MS SQL

  4. operasi hapus kunci seluruh tabel di innodb

  5. Bagaimana cara MYSQL Self-Join Bekerja?