php - 如何使用php中的数据库记录正确循环和创建json
问题描述
我正在尝试通过利用 info 三个数据库表来创建一个 json 数组。
在利用此处找到的信息和解决方案来源
后
,我开始意识到我必须使用外键进行引用并使用连接查询。
这三个表的创建如下,每个表都有它们的引用键
Create table categorys(id int primary key auto_increment, category_name varchar(30), buyer_userid int(30));
Create table product(id int primary key auto_increment, product_name varchar(30), buyer_userid int(30),category_id int,
foreign key (category_id) references categorys(id));
Create table sales(items_id int primary key auto_increment, item_name varchar(30),quantity varchar(30), buyer_userid int(30),
product_id int, foreign key (product_id) references product(id));
这是我预期的 Json 格式...
[
{"id":"1","cat_name":"Provision","catbuy_userid":"100",
"products_info":[{"productid":"2","product_name":"Malt","buyer_userid":"100",
"sales_Info":[{"items_id":"1","item_name":"malt","buyer_userid":"100","quantity":"72"}]
}]},
{"id":"2","cat_name":"Cosmetics","catbuy_userid":"200",
"products_info":[{"productid":"3","product_name":"soapy","buyer_userid":"200",
"sales_Info":[{"items_id":"2","item_name":"cream","buyer_userid":"200","quantity":"83"}]
}]}
]
这是我到目前为止的编码
<?php
$host = "localhost"; /* Host name */
$user = "root"; /* User */
$password = ""; /* Password */
$dbname = "mydb"; /* Database name */
$con = mysqli_connect($host, $user, $password,$dbname);
// Check connection
if (!$con) {
die("Connection failed: " . mysqli_connect_error());
}
$res_arr = array();
$query = '
SELECT
c.id,
c.category_name,
c.buyer_userid,
p.id,
p.product_name,
p.buyer_userid,
p.category_id,
s.items_id,
s.item_name,
s.quantity
FROM `categorys` c
INNER JOIN `product` p ON c.id=p.category_id
INNER JOIN `sales` s ON p.id=s.product_id
ORDER BY c.id';
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)){
$res_arr[] = $row;
}
echo json_encode($res_arr);
exit;
?>
这是我的 json 输出
[{"0":"1","id":"1","1":"Provisions","category_name":"Provisions","2":"100","buyer_userid":"100","3":"4","4":"Malt","product_name":"Malt","5":"100","6":"1","category_id":"1","7":"4","items_id":"4","8":"malt","item_name":"malt","9":"93","quantity":"93"},
{"0":"2","id":"2","1":"Cosmetics","category_name":"Cosmetics","2":"200","buyer_userid":"200","3":"3","4":"soapy","product_name":"soapy","5":"200","6":"2","category_id":"2","7":"3","items_id":"3","8":"cream","item_name":"cream","9":"83","quantity":"83"}
]
请按照上面的 json 格式循环获取结果。
更新部分
错误警告示例当我运行代码时,它们会出现很多错误警告。以下只是其中的几个
警告:在第 51 行的 C:\xampp\htdocs\api\test.php 中使用未定义的常量 products_info - 假定为“products_info”(这将在 PHP 的未来版本中引发错误)
警告:在第 51 行的 C:\xampp\htdocs\api\test.php 中使用未定义的常量 product_name - 假定为“product_name”(这将在 PHP 的未来版本中引发错误)
解决方案
当您说获取结果时,您的意思是您想要访问这些值吗?如果是这样,请将您的 json 数据分配给变量 say data
。
然后:
$json = json_decode($data);
foreach($json[0] as $values1) {
var_dump($values1);
}
foreach($json[1] as $values2) {
var_dump($values2);
}
例如,要从第一个对象中获取产品名称,您将执行 $values1->product_name。其他属性以此类推。
推荐阅读
- javascript - 如何在Javascript中将字符串的元素从左到右替换为从右到左?
- java - 是什么导致 Java 版本随机游走不收敛到预期值?
- macos - 安装 PyGObject 时出错,找不到“glib-object.h”文件
- rails-activestorage - ActiveStorage::PurgeJob 可以排入“默认”以外的队列吗?
- git - 使用 git 下载,没有 repo 数据和本地文件夹
- mysql - MySQL 过程子查询返回 null
- r - purrr:map中字符向量的占位符?
- ocaml - 嵌套在循环中的 if 语句中的 OCaml 返回值
- docker - 为 Saleor 运行 docker-compose 似乎陷入了循环,想法?
- c# - 两次收到推送通知