第一笔收入和第二笔费用,其中包括每个月的收入和费用的时间戳和时间戳, 现在我想把它放在一张表中,如下所示
Month | Income | Expense | Profit
到目前为止,我只能将一个表的数量组合为总计,但我需要一个可以同时处理这两个表的查询。
我的查询是
$result = mysql_query("SELECT
date_on,
MONTHNAME(FROM_UNIXTIME(date_on)) as expmonth,
YEAR(FROM_UNIXTIME(date_on)) as expyear,
sum(amount) as exp_total
from finance_grdps_exp
group by expmonth,expyear order by date_on DESC")
or die(mysql_error());
$no=0;
$countem = 0;
while($row = mysql_fetch_array($result))
{$no++;
echo'
<tr class="gradeX">
<td>'.
$row['expmonth'].' '.$row['expyear'].'
</td>
<td>'.
$row['exp_total'].'
</td>
<td>'.
$row['income_total'].' /* not working as if now
</td>
<td>'.
PROFIT.'/* not working as if now
</td>
</tr>
';
}
Guys Sample日期基础是....
收入表......
Exp Table
Thx
Ruben感谢回复....但我收到错误
...在这两种情况下我都会收到错误---每个派生表都必须有自己的别名....
SELECT MONTHNAME(FROM_UNIXTIME(date_on)) as expmonth,
YEAR(FROM_UNIXTIME(date_on)) as expyear,
SUM(amount) as exp_total,
SUM(income_amount) as inc_total
FROM(SELECT finance_grdps_exp.date_on AS date_on,
finance_grdps_exp.amount AS exp_amount,
0 AS inc_amount
UNION
SELECT finance_grdps_income.income_date AS date_on,
0 AS exp_amount,
finance_grdps_income.income_amount AS inc_amount)
GROUP BY expyear, expmonth ORDER BY date_on DESC
请帮助
答案 0 :(得分:0)
假设您有两个表finance_grdps_exp和finance_grdps_inc具有以下结构:
date_on | amount
如果在一个表中没有在date_on中编码的具有相同年份和月份的两行,则date_on仅包含年份和月份,即所有行的其他字段(日期和时间)相同。
您可以将它们与INNER JOIN构造结合使用:
SELECT finance_grdps_exp.date_on AS date_on,
finance_grdps_exp.amount AS exp_amount,
finance_grdps_inc.amount AS inc_amount
FROM finance_grdps_exp INNER JOIN finance_grdps_inc
ON finance_grdps_exp.date_on = finance_grdps_inc.date_on
结果结构是:
date_on | exp_amount | inc_amount
然后让我们将您的想法应用于结果结构:
SELECT date_on,
MONTHNAME(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expmonth,
YEAR(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expyear,
SUM(finance_grdps_exp_and_inc.exp_amount) as exp_total,
SUM(finance_grdps_exp_and_inc.inc_amount) as inc_total
FROM (SELECT finance_grdps_exp.date_on AS date_on,
finance_grdps_exp.amount AS exp_amount,
finance_grdps_inc.amount AS inc_amount
FROM finance_grdps_exp INNER JOIN finance_grdps_inc
ON finance_grdps_exp.date_on = finance_grdps_inc.date_on) AS finance_grdps_exp_and_inc
GROUP BY expyear, expmonth ORDER BY date_on DESC
mysql_query给了我们:
[
expmonth,
expyear,
exp_total /* expense per month */,
inc_total /* income per month */
]
确保INNER JOIN语句的最大性能 为两个表中的date_on字段创建索引。
其他情况(使用UNION SELECT)。
SELECT MONTHNAME(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expmonth,
YEAR(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expyear,
SUM(finance_grdps_exp_and_inc.exp_amount) as exp_total,
SUM(finance_grdps_exp_and_inc.inc_amount) as inc_total
FROM(SELECT finance_grdps_exp.date_on AS date_on,
finance_grdps_exp.amount AS exp_amount,
0 AS inc_amount
FROM finance_grdps_exp
UNION
SELECT finance_grdps_inc.date_on AS date_on,
0 AS exp_amount,
finance_grdps_inc.amount AS inc_amount
finance_grdps_inc) AS finance_grdps_exp_and_inc
GROUP BY expyear, expmonth ORDER BY date_on DESC