php - 从其他表中选择具有条件规则(计数)的数据

标签 php mysql sql

我的数据库中有这些结构:

Table coupon
coupon_id , code, max_used

Table coupon_history
coupon_history_id, coupon_id, used_date

我能否获取“coupon.max_used”不超过“coupon_history”总历史记录的优惠券数据? 我被困在这里了。我需要一个 coupon_code。请帮助我。

最佳答案

尝试像这样使用 JOININ:

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/

相关文章:

MySQL native 错误处理与唯一值的预期错误处理

php - 违反完整性约束 : 1052

mysql - 如何在 mysql 中使用 COUNT() 和 where ?

php - WAMP 上的 Mysqli,错误 - 连接尝试失败

php - 在 Mysql/PHP 中删除基于浮点列的行?

c# - Entity Framework 5 : One to Many with foreignKey Updated/Added/Deleted

php - 从表单将数据发送到 SQL 数据库时出错

sql - 调用存储过程错误: Error converting data type nvarchar to datetime

php - 选择 * 从表中按 TRIM 排序(全部 [ :nonalphnum:] FROM `title` )

php - 使用 php 发布数据属性