php – 来自3个一对多表的嵌套JSON

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 来自3个一对多表的嵌套JSON脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个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中创建一个数组,但无法得到期望的结果.
我也尝试用group by和GROUP_CONCAT更改我的sql,但是在这里同样,不能得到我想要的JSON.

一些帮助将非常感激.

解决方法

带有一些示例数据的可运行代码http://codepad.org/2Xsbdu23

我使用了3个不同的SELECT来避免不必要的重复.
当然,您必须将$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 );

脚本宝典总结

以上是脚本宝典为你收集整理的php – 来自3个一对多表的嵌套JSON全部内容,希望文章能够帮你解决php – 来自3个一对多表的嵌套JSON所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。