Mysql
 sql >> база данни >  >> RDS >> Mysql

Вложен JSON от 3 таблици една към много

Изпълняем код с някои примерни данни:http://codepad.org/2Xsbdu23

Използвах 3 различни SELECT s, за да избегнете ненужните повторения. Разбира се, трябва да персонализирате $result масив до желания от вас JSON формат, но мисля, че не е толкова трудно.

// 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. Как да филтрирам (или заменя) unicode символи, които биха заели повече от 3 байта в UTF-8?

  2. Грешка при създаването на таблица:Имате грешка във вашия SQL синтаксис близо до 'order( order_id INT UNSIGNED NOT NULL AUTO_INCREMENT, user_id ' на ред 1

  3. Архивирайте mySQL бази данни от localhost, работещи на Wamp сървър

  4. Вмъкнете данни в MySql DB и покажете дали вмъкването е успешно или неуспешно

  5. MySQL ODBC конфигурация