根据我之前创建的这个主题(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
从上表中。在接下来的30天内,来自多个用户的4种产品将会过期。
所以我写道:
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命令?请建议。
此致
答案 0 :(得分:1)
您可以将sum(*)替换为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