[英]How to group two mysql tables by date
如何從兩個表中獲取按日期排列的報告?
貸方表:
------------------------
Date | Amount
------------------------
20/10/2014 | 1200
------------------------
10/10/2014 | 3200
------------------------
05/10/2014 | 1300
------------------------
借方表:
------------------------
Date | Amount
------------------------
20/10/2014 | 2200
------------------------
15/10/2014 | 5200
------------------------
02/10/2014 | 1800
------------------------
輸出應為:
Date Cr Dr
------------------------------
20/10/2014 1200 2200
15/10/2014 0 5200
10/10/2014 3200 0
05/10/2014 1300 0
02/10/2014 0 1800
我嘗試了以下方法:
$date[] = { '20/10/2014','19/10/2014',........Last date };
$i=0;
while ($<sizeof($date))
{
$credit = mysql_fetch_assoc(mysql_query("select * from credit where date='".$date[$i]."'"));
$debit = mysql_fetch_assoc(mysql_query("select * from debit where date='".$date[$i]."'"));
echo $credit["amount"]. $debit["amount"];
}
我收集date
所有的日期from
和to
日期。
我知道這是一種不好的方法,並且它會減慢頁面的執行速度,那么我如何以更智能的方式解決此問題?
先感謝您。
SELECT * FROM (SELECT a.`Date`,
IFNULL(a.Amount, 0) AS Cr,
IFNULL(b.Amount, 0) AS Dr
FROM Credit a
LEFT JOIN Debit b
ON a.`Date` = b.`Date`
UNION
SELECT b.`date`,
IFNULL(a.Amount, 0) AS Cr,
IFNULL(b.Amount, 0) AS Dr
FROM Credit a
RIGHT JOIN Debit b
ON a.`date` = b.`date`)t
ORDER BY t.`Date` DESC;
使用下面的查詢,因為mysql中沒有外部聯接,請使用左右聯接
SELECT date, IFNULL(c.amount, 0) AS credit, IFNULL(d.amount, 0) AS debit
FROM credit c LEFT JOIN debit d
ON c.date = d.date
ORDER BY date DESC
UNION
SELECT date, IFNULL(c.amount, 0) AS credit, IFNULL(d.amount, 0) AS debit
FROM credit c RIGHT JOIN debit d
ON c.date = d.date
ORDER BY date DESC
而PHP代碼將像這樣
$query = 'SELECT date, IFNULL(c.amount, 0) AS credit, IFNULL(d.amount, 0) AS credit
FROM credit c LEFT JOIN debit d
ON c.date = d.date
ORDER BY date DESC
UNION
SELECT date, IFNULL(c.amount, 0) AS credit, IFNULL(d.amount, 0) AS credit
FROM credit c RIGHT JOIN debit d
ON c.date = d.date
ORDER BY date DESC';
$con = mysqli_connect( ) //Connection string;
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_array($result))
{echo '<tr>
<td>'.$row["date"].'</td>
<td>'.$row["credit"].'</td>
<td>'.$row["debit"].'</td>
</tr>';
}
我將使用以下查詢,兩個表之間的左外部聯接聯合右外部聯接(不包括內部聯接匹配記錄,並且將左表值默認為0)。如果貸方和借方表中沒有重復的日期,則可以從sql語句中刪除sum方法。
select c.date_, ifnull(sum(c.amount),0) cr, ifnull(sum(d.amount),0) db from credit c left outer join debit d on c.date_ = d.date_
group by c.date_
union all
select d.date_, 0 cr, ifnull(sum(d.amount),0) db from credit c right outer join debit d on c.date_ = d.date_ where c.date_ is null
group by d.date_
order by date_ desc
在這里,您可以使用sql小提琴鏈接作為參考
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.