Php 根据日期获取总金额
付款历史记录表Php 根据日期获取总金额,php,mysql,mysqli,Php,Mysql,Mysqli,付款历史记录表 ========================== UserId | Amount | Date ========================== 1 | 300 | 2014-06-26 3 | 300 | 2014-06-26 2 | 200 | 2014-06-26 1 | 400 | 2014-06-22 1 | 100 | 2014-06-21 显示两列,第一列是与今天日期相同的名
==========================
UserId | Amount | Date
==========================
1 | 300 | 2014-06-26
3 | 300 | 2014-06-26
2 | 200 | 2014-06-26
1 | 400 | 2014-06-22
1 | 100 | 2014-06-21
显示两列,第一列是与今天日期相同的名为currentEarning的金额总和,第二列是基于今天以前日期的名为oldEarning的金额总和。有关特定用户ID,请参见输出:
输出
=====================================
UserId | currentEarning | oldEarning |
=====================================
1 | 300 | 500
获取当前金额:
SELECT UserId, SUM(Amount) as currentEarning, Date FROM PaymentHistory WHERE UserId = '1' AND DATE(Date) = CURDATE()
获取旧金额:
SELECT UserId, SUM(Amount) as oldEarning, Date FROM PaymentHistory WHERE UserId = '1' AND DATE(Date) != CURDATE()
这应该可以用只需一个查询即可:
SELECT `UserId`,
(SELECT SUM(`Amount`) FROM `PaymentHistory` WHERE `UserID` = t1.`UserId` AND `Date` = t1.`Date`) AS `currentEarning`,
(SELECT SUM(`Amount`) FROM `PaymentHistory` WHERE `UserID` = t1.`UserId` AND `Date` < t1.`Date`) AS `oldEarning`
FROM PaymentHistory AS t1
WHERE t1.`Date` = CURRENT_DATE
GROUP BY t1.`UserId`
HAVING `oldEarning` IS NOT NULL
SELECT
SUM(IF(`Date` = CURRENT_DATE, AMOUNT, 0)) AS currentEarning,
SUM(IF(`Date` < CURRENT_DATE, AMOUNT, 0)) AS oldEarning
FROM PaymentHistory
GROUP BY `UserId`
比子查询或两个单独查询更高效。与子句一起使用。sql在哪里?你的php在哪里?@Fred ii-我知道这里使用的求和函数,但实际上我想根据各种条件生成两列,我需要生成一列query@Z好的,嗯,那么你应该使用内部连接和外部连接,但我不太擅长:抱歉,同意。出于某种原因,我的脑海中有这样一个想法,那就是,这个小组将无法正常工作。时间还早;