我的数据库中有这些结构:
Table coupon
coupon_id , code, max_used
Table coupon_history
coupon_history_id, coupon_id, used_date
我能否获取“coupon.max_used”不超过“coupon_history”总历史记录的优惠券数据? 我被困在这里了。我需要一个 coupon_code。请帮助我。
最佳答案
尝试像这样使用 JOIN
和 IN
:
SELECT cc.* FROM coupon cc
WHERE cc.coupon_id IN
(
SELECT c.coupon_id FROM Coupon c
LEFT JOIN
( SELECT coupon_id, COUNT(coupon_id) maxUsed
FROM coupon_history GROUP BY coupon_id
) ch
ON c.Coupon_id = ch.Coupon_id
WHERE c.max_used > ch.maxUsed
OR ch.maxUsed IS NULL
);
或者您可以像这样简单地使用JOIN
:
SELECT cc.* FROM coupon cc
JOIN
(
SELECT c.coupon_id FROM Coupon c
LEFT JOIN
( SELECT coupon_id, COUNT(coupon_id) maxUsed
FROM coupon_history GROUP BY coupon_id
) ch
ON c.Coupon_id = ch.Coupon_id
WHERE c.max_used > ch.maxUsed
OR ch.maxUsed IS NULL
) c ON cc.coupon_id = c.coupon_id;
看看this SQLFiddle demo
编辑:关于你的second requirement
试试这个查询:
SELECT cc.*,c.TotalUsed FROM coupon cc
JOIN
(
SELECT c.coupon_id,TotalUsed FROM Coupon c
LEFT JOIN
( SELECT coupon_id, COUNT(coupon_id) TotalUsed
FROM coupon_history GROUP BY coupon_id
) ch
ON c.Coupon_id = ch.Coupon_id
WHERE c.max_used > ch.TotalUsed
OR ch.TotalUsed IS NULL
) c ON cc.coupon_id = c.coupon_id;
参见this SQLFiddle
关于php - 从其他表中选择具有条件规则(计数)的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483747/