数据库及流程分析
sql语句如下:
SELECT disticnt brand FROM product_params WHERE product_id IN(SELECT product_id FROM product)
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 = "酒鬼"
SELECT * FROM product_sku WHERE product_id =19 ORDER BY sell_price LIMIT 0,1
productVo 新增了品牌这一项
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; }
![](https://www.www.zyiz.net/i/l/?n=22&i=blog/1859559/202201/1859559-20220127223038990-1895270164.png)