根据分类id获得商品的品牌,并获得该品牌下的所有商品

1.获得该类下商品的所有品牌

根据分类id获得商品的品牌,并获得该品牌下的所有商品

数据库及流程分析

根据分类id获得商品的品牌,并获得该品牌下的所有商品
要获得品牌就要有product_id ,而product_id 是product表中的数据

sql语句如下:

SELECT disticnt brand FROM product_params WHERE product_id IN(SELECT product_id FROM product)

根据分类id获得商品的品牌,并获得该品牌下的所有商品

distinct是为了去重,显然不同商品一个牌子也是存在的
剩下的mapper,service,controller层过于简单,不做赘述

2.获得该品牌下的所有商品

2.1 获得商品的id

sql语句实现(以分类id=13举例)
SELECT p.product_id, p.product_name,p.category_id,p.root_category_id,p.sold_num,p.product_status,p.content, pa.param_id,pa.product_id,pa.product_place,pa.foot_period,pa.brand
FROM product p INNER JOIN product_params pa ON pa.product_id = p.product_id WHERE p.category_id = 13
AND pa.brand = "酒鬼"

2.2获得商品id下的所有套餐中sellPrice最低的套餐

SELECT * FROM product_sku WHERE product_id =19 ORDER BY sell_price LIMIT 0,1

3.后端实现

productVo 新增了品牌这一项

根据分类id获得商品的品牌,并获得该品牌下的所有商品

productMapper

    //根据三级分类id分页商品的brand 和category_id获得商品id,
    //根据商品id获得商品的所有套餐,选择套餐中sellprice最低的那个 还需要当前页的起始索引,当前页的查询记录数
public List<ProductVo> selectProductInfoByBrandsAndCIds(@Param("cid")int cid,@Param("brand") String brand,@Param("start") int start, @Param("pagesize") int pagesize);

productMapper.xml 依然是根据categoryid和品牌得到productId,然后用productId进行子连接

    <id column="product_id" jdbcType="VARCHAR" property="productId" />
    <result column="product_name" jdbcType="VARCHAR" property="productName" />
    <result column="category_id" jdbcType="INTEGER" property="categoryId" />
    <result column="root_category_id" jdbcType="INTEGER" property="rootCategoryId" />
    <result column="sold_num" jdbcType="INTEGER" property="soldNum" />
    <result column="product_status" jdbcType="INTEGER" property="productStatus" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
    <result column="content" jdbcType="LONGVARCHAR" property="content" />
    <collection property="paramsList" ofType="com.qfedu.fmmall.entity.ProductParams" >
      <id column="param_id" jdbcType="VARCHAR" property="paramId" />
      <result column="product_id" jdbcType="VARCHAR" property="productId" />
      <result column="product_place" jdbcType="VARCHAR" property="productPlace" />
      <result column="foot_period" jdbcType="VARCHAR" property="footPeriod" />
      <result column="brand" jdbcType="VARCHAR" property="brand" />
    </collection>
    <!--根据商品id查询sellprice最低的套餐-->
    <collection property="skuList"
     select="com.qfedu.fmmall.dao.ProductSkuMapper.getLowerPriceByProductId"
     column="product_id"/>
  </resultMap>
  <select id="selectProductInfoByBrandsAndCIds" resultMap="ProductMap3">
    SELECT
      p.product_id,
      p.product_name,
      p.category_id,
      p.root_category_id,
      p.sold_num,
      p.product_status,
      p.content,
      pa.param_id,
      pa.product_id,pa.product_place,pa.foot_period,pa.brand
    FROM product p
    INNER JOIN product_params pa
    ON pa.product_id=p.product_id
    WHERE p.category_id =#{cid}
      AND pa.brand=#{brand}
    limit #{start},#{pagesize}
  </select>

productService

    //传参数还是当前的页码,每页最多由多少项数据
    public ResultVo getProductInfoByCidAndBrands(int categoryid,String brand,
                                                 int pageNum,int limit);

productServiceImpl

    public ResultVo getProductInfoByCidAndBrands(int categoryid, String brand, int pageNum, int limit) {
        //1.获得当前页的起始索引
        int start=(pageNum-1)*limit;
        List<ProductVo> productVos1 = productMapper.
                selectProductInfoByBrandsAndCIds(categoryid, brand, start, limit);
        //2.获得该条件下categoryAndProductId的总记录数
        int count=productVos1.size();
        //3.计算总页数
        int pageCount1=0;
        if(count%limit==0) pageCount1=count/limit;
        else pageCount1=count/limit +1;
        //把数据放进pageHelper里
        PageHelper<ProductVo> productVoPageHelper = new PageHelper<>(count, pageCount1, productVos1);
        return new ResultVo(ResStatus.OK,"success",productVoPageHelper);
    }

productController

@ApiOperation("根据商品的分类id和品牌来查询商品信息的接口")
    @GetMapping("/listByCidAndBrand/{cid}")
    //前端要传给后端4个参数,分类id,品牌, 哪一页的评论 该页有多少评论
    @ApiImplicitParams({
            @ApiImplicitParam(dataType = "int", name="pageNum",value="当前的页码数",required = true),
            @ApiImplicitParam(dataType = "int", name = "limit", value="每页最多显示多少条数据",required =true)
    })
    public ResultVo getProductByCidSAndBrands(@PathVariable("cid") int cid,String brand,int pageNum,int limit){
        ResultVo resultVo = productService.getProductInfoByCidAndBrands(cid, brand,pageNum, limit);
        return resultVo;
    }

4.前端实现

![](https://www.icode9.com/i/l/?n=22&i=blog/1859559/202201/1859559-20220127223038990-1895270164.png)

上一篇:独家 | 一文读懂TensorFlow(附代码、学习资料)


下一篇:Docker使用虽无风验,但仍需小心