【问题标题】:MySQL : How to count multiple row where datediff() is less than 30MySQL:如何计算 datediff() 小于 30 的多行
【发布时间】:2013-02-05 17:38:03
【问题描述】:

根据我之前创建的这个主题(MySQL : Count row where sum of left day is less than 30)。现在我有另一个问题。我需要将那些将在 30 天内过期的行作为总和。所以我可以知道一个月内有多少产品会过期。这是我的代码:

user_db

id         name        exp_product1         exp_product2          exp_product1
1          John        2013-03-01           2013-02-28            2013-03-27
2          Alice       2013-02-25           2013-04-25            2013-10-10
3          Ken         2013-01-10           2013-01-20            2013-02-11
4          Elise       2013-04-11           2013-05-23            2013-11-11
5          Bruce       2013-03-14           2013-06-06            2013-09-10

根据上表。有几个用户的 4 件产品将在接下来的 30 天内过期。

  1. 约翰 = exp_product1, exp_product2
  2. 爱丽丝 = exp_product1 和
  3. 布鲁斯 = exp_product1

所以我写了:

    SELECT count(*) AS exp_pax1 
FROM   user_db 
WHERE exp_product1<=timestampadd(day, 30, now())
       AND exp_product1 >= now();

SELECT count(*) AS exp_pax2 
FROM   user_db 
WHERE exp_product2<=timestampadd(day, 30, now())
       AND exp_product2 >= now();

SELECT count(*) AS exp_pax3 
FROM   user_db 
WHERE exp_product3<=timestampadd(day, 30, now())
       AND exp_product3 >= now();

然后我将这些结果与 PHP 相加:(假设已获取值)

$exp_pax1=exp_pax1
$exp_pax2=exp_pax2
$exp_pax3=exp_pax3

$total_exp=$exp_pax1+$exp_pax2+$exp_pax3;//4

好吧,问题是:如何将这些行缩短为单个 mySQL 命令?请提出建议。

问候,

【问题讨论】:

  • 您需要行数还是产品数
  • 仅供参考,这不是存储数据的最佳方式。您可能需要添加带有 products 和 product_user_relations 的额外表。

标签: mysql count sum datediff


【解决方案1】:

您可以将 count(*) 替换为 sum(YOUR CONDITION) 以获取匹配行的计数... 因此,您的查询可能会更改为

SELECT sum(exp_product1<=timestampadd(day, 30, now()) AND exp_product1 >= now()) AS exp_pax1 
 FROM   user_db 

现在您可以将产品 2 和 3 相加得到总数

SELECT sum(exp_product1<=timestampadd(day, 30, now()) AND exp_product1 >= now()) + 
    sum(exp_product2<=timestampadd(day, 30, now()) AND exp_product2 >= now()) +
    sum(exp_product3<=timestampadd(day, 30, now()) AND exp_product3 >= now())
    AS exp 
FROM   user_db 

【讨论】:

  • Andrei,您的代码完美运行!谢谢你。问题解决了。
猜你喜欢
  • 2013-02-05
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
相关资源
最近更新 更多