php – 来自3个一对多表的嵌套JSON
发布时间:2020-12-13 22:44:07 所属栏目:PHP教程 来源:网络整理
导读:我正在构建一个Sencha-Touch 2应用程序,我在从服务器端( mysql DB)恢复数据时遇到了一些麻烦. 这是我的数据模型: Table1 : ID:int description:varchar(100)Table2 : ID:int description:varchar(100) table1_ID:intTable3 : ID:int name:varchar(100) info
我正在构建一个Sencha-Touch 2应用程序,我在从服务器端(
mysql DB)恢复数据时遇到了一些麻烦.
这是我的数据模型: Table1 : ID:int description:varchar(100) Table2 : ID:int description:varchar(100) table1_ID:int Table3 : ID:int name:varchar(100) info:varchar(100) table2_ID:int Table1以一对多的关系连接到Table2,Table2和Table3之间的关系相同. 我想从服务器得到的是一个嵌套的JSON,看起来像这样: [ Table1_object1_ID: 'id' : { Table1_object1_description: 'description',Table2_Objects : [ 'Table2_object1': { Table2_object1_id : 'id',Table2_object1_description : 'description' Table3_Objects : [ table3_object1: { Table3_object1_name : 'name',Table3_object1_info : 'info',},table3_object2: { Table3_object2_name : 'name',Table3_object2_info : 'info',table3_object3: { Table3_object3_name : 'name',Table3_object3_info : 'info',etc... ],'Table2_object2': { Table2_object2_id : 'id',Table2_object2_description : 'description' Table3_Objects : [ ... ] },etc.... ] },Table1_object2_ID: 'id' : { etc.... ] 在我的应用程序中,我为每个表使用3个模型,理想情况下我想将我的数据保存在3个商店中,但这将是另一个问题;-) 第一个Store(基于Table1中的Model)执行JsonP请求以获取嵌套JSON. 实际上我在PHP文件中的SQL请求很简单: SELECT * FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.table1_ID INNER JOIN Table3 ON Table2.ID = Table3.table2_ID; 我尝试用我的SQL结果在PHP中创建一个数组,但无法得到期望的结果. 一些帮助将非常感激. 解决方法
带有一些示例数据的可运行代码:
http://codepad.org/2Xsbdu23
我使用了3个不同的SELECT来避免不必要的重复. // 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 ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |