案例1:
需求:查询出可用票,并把订单号和票号绑定,返回票号给后续操作使用
*注:order_id:外部传入, limit 10:购买的票数,state: 1 -> 可用,2 -> 已使用
set @uids := null;
update
ticket_no set state = 2,
order_id = "123456789"
where
order_id is null
and state = 1
and (select @uids := CONCAT_WS(',', id, @uids)) is not null LIMIT 10;
set @sql := CONCAT("select * from ticket_no where id in (",ifnull(@uids, 'null'),")");
PREPARE stmt FROM @sql;
EXECUTE stmt ;
deallocate prepare stmt;
由于该表数据已达百万,执行时间在可接受范围内
案例2:
需求:按会员编号条件,查出待提示的优惠卷,返回并改变其阅读状态。
set @uids := null;
update sms_coupon_history
set read_msg = 1
where
read_msg = 0 and member_id = "1666281215898431489"
and (select @uids := CONCAT_WS(',', id, @uids)) is not null;
set @sql := CONCAT("select * from sms_coupon_history where id in (", IFNULL(@uids, 'null'), ")");
PREPARE stmt FROM @sql;
EXECUTE stmt;
原数据
执行sql查询后数据:
再次查看原始数据:
结果:查询条件数据已更新