【问题标题】:Output results of a MySQL query in JSON by nesting results of a sub query通过嵌套子查询的结果以 JSON 格式输出 MySQL 查询的结果
【发布时间】:2021-08-13 17:13:39
【问题描述】:

正在从 nodeJS 调用一个表,我从表中正确获取了结果:

            ymvdc_producto   |   ymvdc_imagenes_producto
            ----------------------------------------------
            product 1        |      image product 1 1
                             |      image product 1 2
                             |      image product 1 3
                             |
            product 2        |      image product 2 2
                             |      image product 2 3 

表格的结果应该如上,查询为

        export function listProductos(req: Request, res: Response) {
            //const id_producto = MySQL.instance.conn.escape(req.params.id_producto);
            const objeto = "";
            const query = `SELECT a.nombre_producto,b.id_imagen_producto  FROM ymvdc_producto a
        INNER JOIN ymvdc_imagenes_producto b ON a.id_producto = b.id_producto)`;
        
            MySQL.ejecutarQuery(query, objeto, (error: any, productos: Productos[]) => {
            if (error) {
                res.status(400).json({
                ok: false,
                warning: "error",
                });
            } else {
                res.json({
                ok: true,
                productos: productos,
                });
            }
            });
        }

但是,我需要 res.json 中的 JSON 输出为以下类型:

        {
            "ok": true,
            "productos": [{
                    "nombre_producto": "Producto concreto",
                    "imagenes": [{
                        "id_imagen_producto": "1",
                        "imagen_producto": "imagen 1"
                    }, {
                        "id_imagen_producto": "2",
                        "imagen_producto": "imagen 2"
                    }]
                },
                {
                    "nombre_producto": "Producto concreto 2",
                    "imagenes": [{
                        "id_imagen_producto": "1",
                        "imagen_producto": "imagen 1"
                    }, {
                        "id_imagen_producto": "2",
                        "imagen_producto": "imagen 2"
                    }]
                }
            ]
        }

这是界面:

 export interface Productos {
   id_producto?: string;
   id_usuario: string;
   nombre_producto: string;
   descripcion_producto: string;
   id_categoria: string;
   id_subcategoria: string;

   id_imagen_producto: [];
   imagen_producto: [];
 }

我应该如何创建响应?有什么建议吗?

【问题讨论】:

  • 我应该如何创建响应? 您想在 MySQL 端生成此 JSON 并将其按原样保存到文件中,还是想从在 Node.JS 上收到数据表示?

标签: mysql node.js json


【解决方案1】:

您似乎要求的格式在 SQL 中不可用。 SELECT 不能(或至少不容易)产生您在 ymvdc_producto 列中显示的内容,即重复值被删除。

如果这是本问题中所要求的问题,请计划在您的 Javascript 代码中从数据库接收结果后进行。

妥协:

SELECT ymvdc_producto,
       GROUP_CONCAT(ymvdc_imagenes_producto)
    FROM ...
    GROUP BY ymvdc_producto

这会给你

     ymvdc_producto   |   ...
     ----------------------------------------------
     product 1        |   image product 1 1,image product 1 2,image product 1 3
     product 2        |   image product 2 2,image product 2 3 

您可能会发现使用GROUP_CONCAT 会更容易,然后用逗号分隔以构建首选输出。

【讨论】:

    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多