簡體   English   中英

如何按日期分組兩個MySQL表

[英]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所有的日期fromto日期。

我知道這是一種不好的方法,並且它會減慢頁面的執行速度,那么我如何以更智能的方式解決此問題?

先感謝您。

詢問

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM