两张表:
1、coupon 优惠券表
2、mycoupon 用户所拥有的优惠券表
需求:
制作优惠券领取页面
要根据条件查询出当前所有的优惠券
条件如下:
1、在符合日期之内,开始日期start_time,结束日期over_time
2、用户已经领取过得数量不得超过设定的数量num
目前的SQL语句:
SELECT c.*, mc.status as is_status, mc.use_time, mc.id as mcid, count(*) as mc_count FROM `mtt_coupon` `c` LEFT JOIN `mtt_mycoupon` `mc` ON `mc`.`cid`=c.id and uid=7 LEFT JOIN `mtt_mycoupon` `mc2` ON `mc2`.`cid`=`c`.`id` WHERE `c`.`status` = '1' AND `c`.`start_time` < '1557890412' AND `c`.`over_time` > '1557890412' GROUP BY `mc2`.`cid` HAVING mc_count < c.num LIMIT 0,5
执行的结果:
疑问:
1、目前查询出来的结果,首先是不全的,我需要的是,即使用户没有领取过,也是要查询出来的,比如:coupon表中id为5、7、8的数据
2、从两张数据表中可以看出,很明显coupon表中id为2的优惠券是没有人领取的,但是查询出来的结果却是有的,而且mc_count还有2条
有点弄蒙了,其实分开来写,比如把大于或等于num这条在之后循环中再过滤一遍也行,但是我就是想知道,我这个语句错在了哪里,或者说,如此需求下,能不能用一条sql语句完成,如果能的话,究竟需要怎么写才行呢??
请大神指导,谢谢
能给一下测试数据吗