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

发布于 2022-09-11 19:50:09 字数 1294 浏览 27 评论 0

两张表:
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语句完成,如果能的话,究竟需要怎么写才行呢??

请大神指导,谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笨死的猪 2022-09-18 19:50:09

能给一下测试数据吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文