Php 合并两列以创建帐户流查询
我有两个表,一个用于客户信用(付款),它看起来像这样:Php 合并两列以创建帐户流查询,php,mysql,Php,Mysql,我有两个表,一个用于客户信用(付款),它看起来像这样: id client date amount 1 ana 2012-01-01 5000 2 ana 2012 02-01 10000 3 ana 2012-03-01 5000 id client date amount 1 a
id client date amount
1 ana 2012-01-01 5000
2 ana 2012 02-01 10000
3 ana 2012-03-01 5000
id client date amount
1 ana 2012-01-15 5000
2 ana 2012 02-15 8000
3 ana 2012-03-15 9000
date payment withdrawal
2012-01-01 5000 ----
2012-01-15 ----- 5000
2012-02-01 10000 ----
2012-02-15 ----- 8000
2012-03-01 5000 ----
2012-03-15 ----- 9000
等等
另一张借记(取款)表如下所示:
id client date amount
1 ana 2012-01-01 5000
2 ana 2012 02-01 10000
3 ana 2012-03-01 5000
id client date amount
1 ana 2012-01-15 5000
2 ana 2012 02-15 8000
3 ana 2012-03-15 9000
date payment withdrawal
2012-01-01 5000 ----
2012-01-15 ----- 5000
2012-02-01 10000 ----
2012-02-15 ----- 8000
2012-03-01 5000 ----
2012-03-15 ----- 9000
等等
我想生成一个查询,按日期对每个客户的所有交易进行排序,将两个日期列合并为一个,然后按日期排序,它应该如下所示:
id client date amount
1 ana 2012-01-01 5000
2 ana 2012 02-01 10000
3 ana 2012-03-01 5000
id client date amount
1 ana 2012-01-15 5000
2 ana 2012 02-15 8000
3 ana 2012-03-15 9000
date payment withdrawal
2012-01-01 5000 ----
2012-01-15 ----- 5000
2012-02-01 10000 ----
2012-02-15 ----- 8000
2012-03-01 5000 ----
2012-03-15 ----- 9000
这是我尝试过的,但我知道这是错误的,它提供了重复的记录:
SELECT payments.amount, payments.date withdrawals.amount, withdrawals.date
FROM payments,withdrawals
WHERE payments.client = withdrawals.client
ORDER BY date
我尝试了左连接,但结果相同:
SELECT payments.amount, payments.date, withdrawals.amount, withdrawals.date
FROM payments
LEFT JOIN withdrawals
ON payments.client= withdrawals.client
ORDER BY date
请帮助并感谢您您需要的是一个完整的外部连接:
SELECT payments.amount, payments.date, withdrawals.amount, withdrawals.date
FROM payments FULL OUTER JOIN withdrawals
ON payments.client= withdrawals.client
Order by date
或者使用联合(MySQL需要):
您需要执行两个简单的SELECT查询,每个表分别执行一个查询,然后使用UNION关键字组合结果,如下所示:
SELECT date, amount AS payment, NULL AS withdrawal FROM payments WHERE client = 'ana'
UNION ALL
SELECT date, NULL AS payment, amount AS withdrawal FROM withdrawals WHERE client = 'ana'
ORDER BY date
您不想执行任何类型的联接,因为每一行的数据只从一个表中提取,而不是从另一个表中提取。是否将客户端用作外键?如果安娜拼错了她的名字,后来改成了安娜贝利怎么办?对于这种关系,尽量使用不可更改的类型,如ID。这取决于您使用的数据库类型,对于mysql,您应该使用UNION,因为它不执行完整的外部连接。我通过PHP这样做:$query=mysql_query(“SELECT…”);while($person=mysql_fetch_array($query)){echo$person['client'];echo$person['date'];echo$person['amount'];echo“
”;}