Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 合并两列以创建帐户流查询_Php_Mysql - Fatal编程技术网

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“
”;}