koa+mysql,怎么生成数组,一个用户有一个购物车,一个购物车下有多个商店,一个商店下有多个商品,如下图和代码
发布于 6 年前 作者 1134506391 2093 次浏览 来自 问答

问题,想要查出一个类似淘宝购物车的数据集合

一个用户有一个购物车,一个购物车下有多个商店,一个商店下有多个商品 联表查询 1.根据用户id,查出购物车数据, 2.一个购物车下,有多个商店,黑色框 3.商店下有多个商品,蓝色框 4.一个商品,有这个商品的信息,红色框

bVbdCxW.png

##现在查出来的集合数据

mysql

根据用户id查询数据

let cartSelectGroupByUserId = (userId) => {
    let sql = `select a.cart_goods_number,c.goods_id,c.goods_name,c.goods_img,c.goods_price,d.shop_id,d.shop_name from cart a,user b,goods c,shop d where a.user_id = b.user_id and a.goods_id = c.goods_id and c.shop_id = d.shop_id and a.user_id =${userId};`
    return query(sql)
}

根据商店id查询商店名

let shopSelectNameById = (id) => {
    let sql = `select shop_name from shop where shop_id=${id};`
    return query(sql)
}

####接口

const cartSelectGroupByUserId = async(ctx) => {
    let id = ctx.params.id;
    let shopId;
    await cartModel.cartSelectGroupByUserId(id)
        .then(result => {
            console.log(result)
            shopId = result[0].shop_id
        })
    await cartModel.shopSelectNameById(shopId)
        .then(result => {
            ctx.body = {
                status: 200,
                msg: "根据用户id查询用户购物车所有数据",
                data: result
            }
        })
        .catch(error => {
            console.log(error);
            ctx.body = false;
        })
}

bVbdCvY.png

            data: [
                {
                    cart_goods_number: 3,
                    goods_id: 3,
                    goods_name: "honor7x",
                    goods_img: "honor7x.png",
                    goods_price: 1299,
                    shop_id: 4,
                    shop_name: "honor之家"
                },
                {
                    cart_goods_number: 2,
                    goods_id: 4,
                    goods_name: "honor6x",
                    goods_img: "honor6x.png",
                    goods_price: 1199,
                    shop_id: 4,
                    shop_name: "honor之家"
                },
                {
                    cart_goods_number: 1,
                    goods_id: 1,
                    goods_name: "iPhonex",
                    goods_img: "iPhonex.png",
                    goods_price: 8888,
                    shop_id: 1,
                    shop_name: "iPhone之家"
                }
            ],

##我想要的数据集合大概样子, 一个用户有一个购物车,一个购物车下有多个商店,一个商店下有多个商品

            data1: [
                {
                    shop_id: 4,
                    shop_name: "honor之家",
                    children: [
                        {
                            cart_goods_number: 3,
                            goods_id: 3,
                            goods_name: "honor7x",
                            goods_img: "honor7x.png",
                            goods_price: 1299
                        },
                        {
                            cart_goods_number: 2,
                            goods_id: 4,
                            goods_name: "honor6x",
                            goods_img: "honor6x.png",
                            goods_price: 1199
                        }
                    ]
                },
                {
                    shop_id: 1,
                    shop_name: "iPhone之家",
                    children: [
                        {
                            cart_goods_number: 1,
                            goods_id: 1,
                            goods_name: "iPhonex",
                            goods_img: "iPhonex.png",
                            goods_price: 8888
                        }
                    ]
                }
            ]

##数据库 ####购物车表 用户id,商品id,商品数量

CREATE TABLE `cart` (
  `cart_id` int(10) NOT NULL AUTO_INCREMENT,
  `user_id` int(10) DEFAULT NULL,
  `goods_id` int(10) DEFAULT NULL,
  `cart_goods_number` int(10) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `last_edit_time` datetime DEFAULT NULL,
  PRIMARY KEY (`cart_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

用户表

CREATE TABLE `user` (
  `user_id` int(10) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(10) DEFAULT NULL,
  `user_password` varchar(10) DEFAULT NULL,
  `user_img` varchar(1024) DEFAULT NULL,
  `user_phone` varchar(11) DEFAULT NULL,
  `user_sex` int(2) NOT NULL DEFAULT '1' COMMENT '1:男,2:女',
  `user_address` varchar(100) DEFAULT NULL,
  `user_state` int(2) NOT NULL DEFAULT '1' COMMENT '1:允许使用,2:禁止使用',
  `create_time` datetime DEFAULT NULL,
  `last_edit_time` datetime DEFAULT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `user_name` (`user_name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

商品表

CREATE TABLE `goods` (
  `goods_id` int(10) NOT NULL AUTO_INCREMENT,
  `goods_name` varchar(10) DEFAULT NULL,
  `goods_img` varchar(1024) DEFAULT NULL,
  `goods_price` double DEFAULT NULL,
  `goods_number` int(10) DEFAULT NULL,
  `goods_priority` int(2) NOT NULL DEFAULT '1',
  `goods_state` int(2) NOT NULL DEFAULT '1' COMMENT '1:允许使用,2:禁止使用',
  `shop_id` int(10) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `last_edit_time` datetime DEFAULT NULL,
  `goods_desc` varchar(1024) DEFAULT NULL,
  PRIMARY KEY (`goods_id`),
  UNIQUE KEY `goods_name` (`goods_name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

商店表

CREATE TABLE `shop` (
  `shop_id` int(10) NOT NULL AUTO_INCREMENT,
  `shop_name` varchar(10) DEFAULT NULL,
  `shop_phone` varchar(11) DEFAULT NULL,
  `shop_img` varchar(1024) DEFAULT NULL,
  `shop_category_id` int(10) DEFAULT NULL,
  `shop_priority` int(2) NOT NULL DEFAULT '1',
  `shop_state` int(2) NOT NULL DEFAULT '1' COMMENT '1:允许使用,2:禁止使用',
  `create_time` datetime DEFAULT NULL,
  `last_edit_time` datetime DEFAULT NULL,
  `shop_desc` varchar(1024) DEFAULT NULL,
  PRIMARY KEY (`shop_id`),
  UNIQUE KEY `shop_name` (`shop_name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
回到顶部