Php 从其他表中选择具有条件规则(计数)的数据
我的数据库中有以下结构:Php 从其他表中选择具有条件规则(计数)的数据,php,mysql,sql,Php,Mysql,Sql,我的数据库中有以下结构: Table coupon coupon_id , code, max_used Table coupon_history coupon_history_id, coupon_id, used_date 我可以在优惠券历史记录中使用的优惠券数据不超过总历史记录吗? 我被困在这里了。我需要一张优惠券密码。请帮助我。您可以在下面尝试: select IF(count(*)<max_used,'less','more') as T,coupon.*
Table coupon
coupon_id , code, max_used
Table coupon_history
coupon_history_id, coupon_id, used_date
我可以在优惠券历史记录中使用的优惠券数据不超过总历史记录吗?
我被困在这里了。我需要一张优惠券密码。请帮助我。您可以在下面尝试:
select IF(count(*)<max_used,'less','more') as T,coupon.*
from coupon
LEFT JOIN coupon_history ON coupon_history.coupon_id = coupon.coupon_id
group by coupon_history.coupon_id
您可以检查每一行的“状态”,以了解它是否超过最大使用量。只是另一种方法
SQL Fiddle:我在这里找到了一个解决方案,但我希望对其他查询有更多建议,因为我不测试效率和有效性 这是:
SELECT * FROM coupon WHERE coupon_id = 'MY_COUPON_ID' AND
(SELECT COUNT(*) FROM coupon_history) < max_used
尝试使用“加入”和“加入”,如下所示:
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
);
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;
或者,您也可以像这样简单地使用JOIN:
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
);
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;
看看
编辑:关于你的
请尝试以下查询:
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;
看到伟大的答案!!。。但我怎样才能显示在同一个查询中使用了多少优惠券呢?很好的解决方案,但“少”和“多”状态意味着什么呢?如何显示在同一查询中使用的优惠券数量?少表示使用的最大优惠券数量小于优惠券数量,多表示使用的历史优惠券数量超过使用的最大优惠券数量。谢谢,我忘了查看计数公式。谢谢你和@hims056都给了我一个正确的答案。你能再帮我一次吗??您的查询只显示已经使用过一次的优惠券,但不会返回任何从未使用过的优惠券。请帮忙。