Php 为JSON输出查询多个不同大小的表

Php 为JSON输出查询多个不同大小的表,php,mysql,json,Php,Mysql,Json,为了解释我的问题,我有3个关于饮料制造商的信息表。它们类似如下: t_manufacturers ___________________________________ | ID | name | phone | | 1 | Coke | 123456 | | 2 | Pepsi | 654321 | ___________________________________ t_drinks _________

为了解释我的问题,我有3个关于饮料制造商的信息表。它们类似如下:

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”一起运行,但将其保留为“似乎”似乎是错误的