Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

JSON lồng nhau từ 3 bảng một đến nhiều

Mã có thể chạy với một số dữ liệu mẫu: http://codepad.org/2Xsbdu23

Tôi đã sử dụng 3 SELECT riêng biệt s để tránh lặp lại không cần thiết. Tất nhiên bạn phải tùy chỉnh $result mảng sang định dạng JSON mong muốn chính xác của bạn, nhưng tôi nghĩ nó không khó lắm.

// 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. CHỌN VÀO OUTFILE không thể ghi vào tệp

  2. Cách nhận truy vấn để chuyển đến các trang tiếp theo khi phân trang kết quả

  3. Gọi thủ tục được lưu trữ có chứa SQL động từ Trigger

  4. INT (5) trong mysql có nghĩa là gì?

  5. Làm thế nào để gợi ý chỉ mục để sử dụng trong truy vấn chọn MySQL?