Php 为JSON输出查询多个不同大小的表
为了解释我的问题,我有3个关于饮料制造商的信息表。它们类似如下:Php 为JSON输出查询多个不同大小的表,php,mysql,json,Php,Mysql,Json,为了解释我的问题,我有3个关于饮料制造商的信息表。它们类似如下: t_manufacturers ___________________________________ | ID | name | phone | | 1 | Coke | 123456 | | 2 | Pepsi | 654321 | ___________________________________ t_drinks _________
t_manufacturers
___________________________________
| ID | name | phone |
| 1 | Coke | 123456 |
| 2 | Pepsi | 654321 |
___________________________________
t_drinks
___________________________
| ID | name |
| 2 | cherry Pepsi |
| 1 | cherry coke |
___________________________
t_brandlogos
__________________________
| ID | imagename |
| 1 | original_coke |
| 2 | original_pepsi |
| 2 | cherry_pepsi |
| 1 | cherry_coke |
__________________________
我想查询这些数据,这样我就可以得到一个json文件,其中包含每个制造商及其所有可用的品牌徽标/图像和饮料,并匹配表之间的ID
如果我只查询可口可乐的信息,我会想象并希望“pretty”json的内容与此类似:
[
{
“ID”:1,
“name”:”coke”,
“drinks”:
[{“name”:”cherry coke”},
{“name”:”coke”}],
“images”:
[{“imagename”:”original_coke”},
{“imagename”:”cherry_coke”}]
]
我正在使用PHP从我的网站运行查询并返回json。我遇到的问题是,我不确定如何编写MySQL查询逻辑,将结果输入php,以便php能够以json格式返回数据
更清楚地说,我可以让它做一些事情,但我似乎无法让query/php正确地构造传出的json,所有数据都不包含重复信息
任何指导都将不胜感激
编辑***
我认为实现这一点的方法是在PHP中运行3个查询,最终得到一个饮料制造商的数组和他们的饮料/图像的数组(正如我所希望的json输出所建议的那样)
要做到这一点,我想我会查询饮料制造商的ID/名称,然后分别查询每个制造商的饮料/徽标阵列
php能够做到这一点吗。。。像C++一样简单。p>
结束编辑***
新编辑***
因此,我成功地将输出获取到数组中,但是我现在遇到的问题是,输出中没有饮料/图像数组,例如:
“drinks”:
[{“name”:”cherry coke”},
{“name”:”coke”}],
“images”:
[{“imagename”:”original_coke”},
{“imagename”:”cherry_coke”}]
]
相反,“饮料”和“图像”被替换为“0”和“1”
到目前为止,我完成这项工作的方式是查询所有制造商,然后使用ID为每个制造商查询所有饮料。我获取饮料的新数组,然后将其附加到当前制造商数组的末尾,图像也是如此,然后将当前制造商添加到制造商数组中。我在这个smie sudocode中实现了这些循环:
for_each_manufacturer{
for_each_drink{
array_push($drinkArray, $tempDrinkArray);
}
array_push($currentManufacturerArray, $drinkArray);
for_each_image{
array_push($imageArray, $tempImageArray);
}
array_push($currentManufacturerArray, $imagesArray);
array_push($manufacturerArray, $currentManufacturerArray);
}
我现在要解决的问题(因为我得到了正确的输出格式)是将“0”和“1”分别更改为“饮料”和“图像”
感谢迄今为止一直在帮助我们的每一个人
结束新编辑***
我能够解决这个问题,只需向数组中添加一个旧数据的副本,但使用不同的键,然后将数据放在旧键下
$currentManufacturerArray["images"] = $currentManufacturerArray["1"];
unset($currentManufacturerArray["1"]);
嗨,查尔斯,欢迎来到Stack Overflow 我建议将其分为三个不同的查询,第一个是填写公司,第二个是添加饮料,第三个是最终添加图像 由于您是PHP新手,这里有一些关于如何构建结果的指导:
//定义响应数组
$responseArray=[];
//步骤1:填写公司,使用公司ID作为数组键(演示中的“1”)
//将其替换为第一个mysqli_查询();
//稍后我们将需要空数组。
$responseArray[1]=[
'ID'=>1,
“名称”=>“可口可乐”,
“饮料”=>[],
“图像”=>[]
];
//步骤2:将饮料推入“饮料”子数组,使用公司ID和“饮料”作为数组键(“演示中的1”)
//这将发生在您的第二个mysqli_查询()中;
$responseArray[1]['饮料][]=['name'=>'樱桃可乐'];
$responseArray[1]['饮料][]=['name'=>'可口可乐'];
//步骤2:将图像推入“饮料”子数组,使用公司ID和“图像”作为数组键(“演示中的1”)
//这将发生在第三个mysqli_查询()中;
$responseArray[1]['images'][['imagename'=>original_coke'];
$responseArray[1]['images'][['imagename'=>'cherry_coke'];
//将结果输出为JSON。array_values(…)调用确保在结果中将公司ID作为数组键
标题('Content-Type:application/json');
打印json_编码(数组_值($responseArray));
这将给您以下结果:
[
{
"ID": 1,
"name": "Coca Cola",
"drinks": [
{
"name": "Cherry Cola"
},
{
"name": "Coca cola Coke"
}
],
"images": [
{
"imagename": "original_coke"
},
{
"imagename": "cherry_coke"
}
]
}
]
要循环浏览companys表并填写值,可以使用类似以下代码:
//没有错误处理,因为这只是一个功能示例。。。
$responseArray=[];
$connection=mysqli_connect('HOST','USER','PASS','DATABASE');
//添加公司。。。
$query='1
挑选
身份证,姓名
从…起
"制造商",;
$result=mysqli\u查询($connection,$query);
while($row=mysqli\u fetch\u assoc($result)){
$responseArray[$row['ID']]=[
'id'=>$row['id'],
“公司”=>$row[“名称”],
“饮料”=>[],
“图像”=>[]
];
}
这将给您一个包含所有公司的结果。如果只想输出一个公司,请在三个查询中使用WHERE
子句。在这个简单的演示中,您还可以使用以下命令从响应阵列中选择一家公司:
print json_encode($responseArray[1]); // would give you the Coca section
如果这对您有帮助,请告诉我。这与我所做的类似,我的示例可能过于简单,我应该指出,我每次都会查询所有制造商及其所有徽标/饮料。我的解决方案(我仍在调整)对每个信息数组运行单独的查询,并在代码中的战略实例中为每个饮料制造商附加子数组。谢谢你的指导和帮助!!看起来你可能正在谈论我正在讨论的一个问题。为了便于阅读/理解,我在帖子中添加了一个新的编辑。您的代码显示的是一个制造的数组,该数组将被my query(ies)替换,但制造商的初始查询结构不会创建数组标题“饮料”或“图像”。我如何简单地添加“饮料”或“图片”标题,甚至仅仅替换当前得到的“0”和“1”标题?这不是一个问题,而是我希望保持变量名称的一致性和易于理解。它将与“0”或“1”一起运行,但将其保留为“似乎”似乎是错误的