簡體   English   中英

MariaDb:如何創建嵌套 json object 查詢

[英]MariaDb: How to create a nested json object query

我想在 MySql select 查詢中生成一個 json 對象數組。

這是一個數據庫結構,我想為其返回以下格式的結果。

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(6) unsigned NOT NULL,
  `name` varchar(255),
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `shops` (
  `id` int(6) unsigned NOT NULL,
  `name` varchar(255),
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

:: 更新::

預期的 JSON output 將在 postman 中返回:

{
    "data": [
        {
            "products": {
                "name": "product1"
            },
            "shops": {
                "name": "shop1"
            }
        }, 
        {
            "products": {
                "name": "product2"
            },
            "shops": {
                "name": "shop2"
            }
        }
    ]
}

我已經搜索過相同的內容,但無法獲得與我的主題相關的結果,因此是否可以在MariaDB中創建查詢以呈現上述結果?

PS:數據庫版

我並不完全清楚你需要得到什么,但是

這是開始的:

SELECT CONCAT(
    '{"shops": [', 
    GROUP_CONCAT(CONCAT('{"name": "', name, '"}') separator ","),
    ']}'
)
FROM shop;

這將產生這個 output:

{"shops": [{"name": "shop 1"},{"name": "shop 2"},{"name": "shop 3"}]}

然后你可以做這樣的事情:

SELECT CONCAT(
    '{',
    (SELECT CONCAT(
        '"shops": [', 
        GROUP_CONCAT(CONCAT('{"name": "', name, '"}') separator ","),
        ']'
    ) FROM shop),
    ',',
    (SELECT CONCAT(
        '"products": [', 
        GROUP_CONCAT(CONCAT('{"name": "', name, '"}') separator ","),
        ']'
    ) FROM product),
    '}'
);

這將給出一些 ghis:

{"shops": [{"name": "shop 1"},{"name": "shop 2"},{"name": "shop 3"}],"products": [{"name": "product 1"},{"name": "product 2"},{"name": "product 3"}]}

現在,無論如何您都可以混合使用您想要的 output。

這是另一個版本:

SELECT CONCAT('{"data": [', GROUP_CONCAT(json, ""), ']}')
FROM (
    SELECT GROUP_CONCAT(CONCAT('{"shop": {"name": "', name, '"}}') separator ",") json
    FROM shop
    union all
    SELECT GROUP_CONCAT(CONCAT('{"product": {"name": "', name, '"}}') separator ",") json
    FROM product
) t;

產生:

{"data": [{"shop": {"name": "shop 1"}},{"shop": {"name": "shop 2"}},{"shop": {"name": "shop 3"}},{"product": {"name": "product 1"}},{"product": {"name": "product 2"}},{"product": {"name": "product 3"}}]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM