2011-11-08 25 views
2

可能重複:
How to sort by previous date in database?如何排序和添加我的數據庫記錄?

我想要做的就是選擇從MySQL是一個日期記錄,然後從我的數據庫記錄我需要添加這是按日期排序

我的數據庫記錄:

amount | date 
2.0 | 2011-10-01 
1.4 | 2011-10-02 
2.6 | 2011-10-01 
2.3 | 2011-10-02 
4.4 | 2011-10-01 
5.6 | 2011-10-03 
6.3 | 2011-10-01 

我想在我的界面中顯示:

amount | date 
2.0 | 2011-10-01 
2.6 | 2011-10-01 
4.4 | 2011-10-01 
6.3 | 2011-10-01 
--------------------------- 
15.3 | 2011-10-01 


1.4 | 2011-10-02 
2.3 | 2011-10-02 
---------------------------- 
3.7 | 2011-10-02 


5.6 | 2011-10-03 
---------------------------- 
5.6 | 2011-10-03 

我的代碼(它不工作):

$Current = date("Y-m-d" ,strtotime("now")); 
$query=mysql_query("SELECT * from item where date < $Current order by date");  
    while($re=mysql_fetch_array($query)){ 
    echo $total = $total + $re['amount']; 
    echo $re['date']; 
    } 

這是不是能很好地工作?

感謝

+0

這可以通過查詢與聚合函數的數據庫中進行,見http://dev.mysql.com/doc/refman/5.0/en/group-by-functions。 html – hakre

回答

2

你有沒有看着MySQL的WITH ROLLUP選項。

像這樣的事情

SELECT date,amount,item_id FROM table GROUP BY date,item_id WITH ROLLUP 
+0

謝謝,這就是我想要的 – Oscar

+0

你能把這個標記爲答案嗎?謝謝。 – liquorvicar

0

1)您可以查詢每一個日期,你想顯示

SELECT *, SUM(amount) FROM table WHERE date = @date; 

2)您可以查詢所有的日期,並查詢總計

- 錶行:

SELECT * FROM table WHERE date < @date ORDER BY date; 

- 表總計:

SELECT SUM(amount) FROM table WHERE date < @date GROUP BY date ; 

你可以做第二個選項中只有一個查詢,但性能將是非常糟糕:

SELECT *, (SELECT SUM(amount) FROM table WHERE date < @date GROUP BY DATE) AS total FROM table WHERE date < @date ORDER BY date; 
+0

感謝您的評論,它也幫助 – Oscar

+0

然後評價我的回答屁股possitive,甚至解決方案:) –

+1

「屁股積極」有點含糊%) –

0

要檢索反正顯示所有這些記錄,不是嗎?然後:
在你的PHP腳本中,你可以存儲它「處理」的最後日期。如果下一條記錄有另一個日期值,則當前「組」已完成 - >打印當前總和,將其重置爲零並存儲新日期。打印當前記錄,增加amount。重複,直到沒有更多的記錄。

<?php 
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
setup($pdo); 

$prevDate = null; 
$sum = 0; 
foreach($pdo->query('SELECT * FROM soFoo WHERE `date`<CURDATE() ORDER BY `date`', PDO::FETCH_ASSOC) as $row) { 
    if ($prevDate!=$row['date']) { 
     if (!is_null($prevDate)) { 
      echo "-----------------\n", $sum, ' | ', $prevDate, "\n\n"; 
      $sum = 0; 
     } 
     $prevDate=$row['date']; 
    } 

    echo $row['amount'], ' | ', $row['date'], "\n"; 
    $sum += $row['amount']; 
} 


function setup($pdo) { 
    $pdo->exec('CREATE TEMPORARY TABLE soFoo (
     id int auto_increment, 
     amount Decimal(8,1), 
     `date` Date, 
     primary key(id) 
    )'); 
    $pdo->exec("INSERT INTO soFoo (amount,`date`) VALUES 
     (2.0, '2011-10-01'), 
     (1.4, '2011-10-02'), 
     (2.6, '2011-10-01'), 
     (2.3, '2011-10-02'), 
     (4.4, '2011-10-01'), 
     (5.6, '2011-10-03'), 
     (6.3, '2011-10-01') 
    "); 
} 

打印

2.0 | 2011-10-01 
2.6 | 2011-10-01 
4.4 | 2011-10-01 
6.3 | 2011-10-01 
----------------- 
15.3 | 2011-10-01 

1.4 | 2011-10-02 
2.3 | 2011-10-02 
----------------- 
3.7 | 2011-10-02 

5.6 | 2011-10-03 
相關問題