Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从其他表中选择具有条件规则(计数)的数据_Php_Mysql_Sql - Fatal编程技术网

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都给了我一个正确的答案。你能再帮我一次吗??您的查询只显示已经使用过一次的优惠券,但不会返回任何从未使用过的优惠券。请帮忙。