mysql用户变量的业务中的应用

公司积分商城业务需求:

每个商品归于一种品类,在首页展示一个品类展示四个商品,前端下拉刷新展示新的品类,新的品类下面至多只展示四个商品

这里需要写一个不是分页数据的分页查询

根据业务需求 商品和品类是多对多的关系 现在有三张表

shop_goods —商品表

shop_goods_type_rel —商品品类关联表

shop_goods_type —品类表

解决思路,将所有商品按品类字段查出,同时加上变量rank计数,rank只计算同一品类的商品个数,限制rank小于等于4

	SELECT
		a.goods_code,
		a.goods_name, 
		a.goodsTypeCode,
		a.goodsTypeName,
 	 IF (
        @tmp = goodsTypeCode ,@rank :=@rank + 1,@rank := 1
        ) AS new_rank,
        @tmp := goodsTypeCode AS tmp
	FROM
		(
		SELECT
			t.goods_name,
			t.goods_code,
			s.level_one_code AS goodsTypeCode,
			g.NAME AS goodsTypeName
	FROM
		t_shop_goods t
		RIGHT JOIN t_shop_goods_type_detail s ON t.goods_code = s.goods_code
		LEFT JOIN t_shop_goods_type g ON g.type_id = s.level_one_code 
	ORDER BY
		g.sort,
		s.level_one_code,
		t.sale_price 
	) a

在这里插入图片描述
可以将

这里@rank @tmp 都用到了mysql的变量

变量分为局部变量,用户变量,会话变量,全局变量

此处@的写法为用户变量

用户变量类似于java中对象的成员变量,在不做set处理的时候,变量值永远不会改变,就是说@rank @tmp在不做处理的时候,这条sql执行的时候这两个值不会改变,

变量复制方法有两种

第一种

@rank =1; @rank:=1

第二种

select num into @rank from goods where id=“1”

实现业务功能的点就在于

 IF (
@tmp = goodsTypeCode ,@rank :=@rank + 1,@rank := 1
        ) AS new_rank

如果 @tmp 等于goodsTypeCode,@rank则自增 否则@rank为1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值