自定义从mysql中提取的JSON

问题描述 投票:0回答:1

假设这是我的数据库表

id    ProductID    color      size
1      abc           red        L
2      abc           green      M
3      abc           yellow     S
4      def           purple     L
5      def           brown      M
6      def           pink       S

现在我正在用我的sql queires来输入数据,但是在响应中我希望我的json是这样的结构。

{
    "status": true,
    "message": "All Product Logs has been fetched Successfully",
    "products": [
        {
            "id": "1",
            "ProductID": "abc",
            "colors": [
                   "red",
                   "green",
                   "yellow",
                    ],
            "sizes": [
                   "L",
                   "M",
                   "S",
                    ]
        },
        {
            "id": "2",
            "ProductID": "def",
            "colors": [
                   "purple",
                   "brown",
                   "pink",
                    ],
            "sizes": [
                   "L",
                   "M",
                   "S",
                    ]
        }
    ]
}

这就是我所做的,但它并没有意义。

   if ($response) {
   $JSONDataArray=[];
   $ColorDataArray=[];
   $SizeDataArray=[];
   while($row = mysqli_fetch_array($response)){

   $ColorDataArray[]=array($row['color']);
   $SizeDataArray[]=array($row['size']);
   $JSONDataArray[]=array('productid' =>$row['productid'],'color' => $ColorDataArray,'sizes' => $SizeDataArray);
   }
        echo json_encode(['status'=>true,'message'=>'All Products has been fetched Successfully','products'=>$JSONDataArray]);
}

Anykind of help would be appreciated. 你觉得我应该改变我的数据库结构还是应该改变我的查询。我只是用户 Select * 查询,不含任何where子句

mysql json
1个回答
0
投票

一种选择是使用 JSON_ARRAYAGG 功能。

SELECT JSON_PRETTY(
  CONCAT(
    '{"status": true, ',
    '"message": "All Product Logs has been fetched Successfully", ',
    '"products": [',
    (
      SELECT
        GROUP_CONCAT(`der`.`json`)
      FROM (
        SELECT
          JSON_OBJECT(
            'ProductID', `ProductID`,
            'colors', JSON_ARRAYAGG(`color`),
            'sizes', JSON_ARRAYAGG(`size`)
          ) `json`
        FROM
          `tbl`
        GROUP BY
          `ProductID`
      ) `der`
    ),
    ']}'
  )
) `json_response`;

哑谜.

牢记。GROUP_CONCAT: 结果被截断到最大的长度,该长度由以下因素决定 group_concat_max_len 系统变量。

© www.soinside.com 2019 - 2024. All rights reserved.