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
表中的哪一列将其链接到weeks
和user
表
【参考方案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 表内表的主要内容,如果未能解决你的问题,请参考以下文章