mysql中left join联合查询与统计问题?

两张表:
1、coupon 优惠券表

clipboard.png

2、mycoupon 用户所拥有的优惠券表

clipboard.png

需求:
制作优惠券领取页面
要根据条件查询出当前所有的优惠券

条件如下:
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

执行的结果:

clipboard.png

疑问:

1、目前查询出来的结果,首先是不全的,我需要的是,即使用户没有领取过,也是要查询出来的,比如:coupon表中id为5、7、8的数据
2、从两张数据表中可以看出,很明显coupon表中id为2的优惠券是没有人领取的,但是查询出来的结果却是有的,而且mc_count还有2条

有点弄蒙了,其实分开来写,比如把大于或等于num这条在之后循环中再过滤一遍也行,但是我就是想知道,我这个语句错在了哪里,或者说,如此需求下,能不能用一条sql语句完成,如果能的话,究竟需要怎么写才行呢??

请大神指导,谢谢

阅读 4k
1 个回答

能给一下测试数据吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏