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好的,嗯,那么你应该使用内部连接和外部连接,但我不太擅长:抱歉,同意。出于某种原因,我的脑海中有这样一个想法,那就是,这个小组将无法正常工作。时间还早;