Json 表内表

Posted

技术标签:

【中文标题】Json 表内表【英文标题】:Json table inside table 【发布时间】:2017-07-27 06:31:48 【问题描述】:

我想使用 json 在我的 mysql (PDO) 中发送 3 个表。第一个表中有一个循环 笔记: 第一个表(fetchAll) 第二张表(获取) 第三张表(获取)

$stmt1 = $db->prepare("SELECT * FROM data WHERE countid='1'");
$stmt1->execute();
$data = $stmt1->fetchAll(PDO::FETCH_OBJ);

$stmt2 = $db->prepare("SELECT id,title FROM weeks WHERE id='2'");
$stmt2->execute();
$data->weeks[] = $stmt2->fetch(PDO::FETCH_OBJ);

$stmt3 = $db->prepare("SELECT id,name FROM user WHERE id='1'");
$stmt3->execute();
$data->user[] = $stmt3->fetch(PDO::FETCH_OBJ);

$response = new stdClass();
$response->data[] = $data;

echo json_encode($response);

如何发送到这种格式:

"data":[
        "title":"name of module1",
          "description":"description of module1",
          "weeks":["id":1,"title":"Week 01"],
          "user":["id":1,"name":"george"]
        ,
        "title":"name of module2",
          "description":"description of module2",
          "weeks":["id":2,"title":"Week 02"],
          "user":["id":2,"name":"john"]
        
        ]

数据: id、name、content、user_id、week、countid;

周数: id、data_id、checkin、checkout;

用户: id、用户名、姓名、姓氏;

(data.id==weeks.data_id) 和 (data.user_id==user.id) 相同..

【问题讨论】:

第一个问题,第一个表不是数组。需要更改所有代码才能使其成为数组,所以我提出了一个新问题。提问者回答说他可以在一个单独的问题中回答他。 似乎不需要fetchAll,因为您只在第一个查询中选择了一行 从我的第一个查询中选择 * 但是WHERE countid='1' 或者countid=1 有超过1 行 还有data 表中的哪一列将其链接到weeksuser 【参考方案1】:

好的,现在需要更多代码。您必须获取所有 data 行,然后使用其中的键从其他 2 个表中获取相关行。

$stmt = $db->prepare("SELECT * FROM data WHERE countid='1'");
$stmt->execute();
$datas = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach ( $datas as $key => &$data ) 
    // get related weeks data
    $stmt = $db->prepare("SELECT id,title FROM weeks WHERE data_id=:id ORDER BY id");
    $stmt->execute( array(':id'=>$data->id) );
    $data->weeks = $stmt->fetchAll(PDO::FETCH_OBJ);

    // get related user data  
    $stmt = $db->prepare("SELECT id,name FROM user WHERE id=:id ORDER BY id");
    $stmt->execute( array(':id'=>$data->user_id) );
    $data->user = $stmt->fetchAll(PDO::FETCH_OBJ);


echo json_encode( array('data'=>$datas) );

结果:


    "data": [
        
            "id": 1,
            "title": "name of module1",
            "description": "description of module 1",
            "user_id": 1,
            "week": "1",
            "countid": 1,
            "weeks": [
                
                    "id": 1,
                    "title": "Week 01"
                
            ],
            "user": [
                
                    "id": 1,
                    "name": "chris"
                
            ]
        ,
        
            "id": 2,
            "title": "name of module 2",
            "description": "description of module 2",
            "user_id": 2,
            "week": "2",
            "countid": 1,
            "weeks": [
                
                    "id": 2,
                    "title": "Week 02"
                
            ],
            "user": [
                
                    "id": 2,
                    "name": "john"
                
            ]
        
    ]

【讨论】:

致命错误:无法在第 17 行的 /home/villabul/domains/yazlikvillabul.com/public_html/uyelik/test.php 中将 stdClass 类型的对象用作数组第 17 行:$data[$key] ->weeks[] = $stmt->fetchAll(PDO::FETCH_OBJ); 修改试试 同样的致命错误:无法在第 17 行的 /home/villabul/domains/yazlikvillabul.com/public_html/uyelik‌​/test.php 中使用 stdClass 类型的对象作为数组

以上是关于Json 表内表的主要内容,如果未能解决你的问题,请参考以下文章

ABAP 内表数据 与 Json串 相互转换

ABAPJson格式转ABAP内表

ABAPJson格式转ABAP内表

abap中 内表的问题

将瀚高数据库表内数据导出Excel格式

通过mybatis实现单表内一对多的数据展示