2012-02-07 84 views
0

我有2個查詢顯示月至日的總數。我需要通過它們循環,以便它們結束在同一張表中。是否可以合併WHILE或將查詢合併爲ORDERS交替?循環播放2個查詢的結果

while(($row = array_shift($MTDcurrent)) || ($row = array_shift($MTDprevious))){ 
    $row = 'your data'; 
} 

不過,我不認爲這是乾淨,明顯的方式:

$MTDcurrent = $db->Execute("SELECT SUM(order_total) AS MTDC, month(date_purchased) AS Months FROM " . TABLE_ORDERS ." 
         WHERE orders_status IN(1,2,3,100,101,103,105) AND date(date_purchased) BETWEEN DATE_FORMAT(current_date,'%Y-01-01') AND current_date GROUP BY Months ASC LIMIT 10 "); 

$MTDprevious = $db->Execute("SELECT SUM(order_total) AS MTDP, month(date_purchased) AS Months FROM " . TABLE_ORDERS ." 
         WHERE orders_status IN(1,2,3,100,101,103,105) AND date(date_purchased) BETWEEN DATE_FORMAT(date_sub(current_date, INTERVAL 1 year),'%Y-01-01') AND date_sub(current_date, INTERVAL 1 year) 
         GROUP BY Months ASC LIMIT 10 "); 

由於提前

回答

0

這是一個略有不同的方法,避免了多個查詢。我還沒有嘗試過,因爲我沒有在機器上的RDBMS我使用的權利,但現在它應該是足夠近 -

SELECT 
    SUM(order_total) AS MTDP, 
    month(date_purchased) AS Months, 
    year(date_purchased) AS Years 
FROM orders 
WHERE orders_status IN(1,2,3,100,101,103,105) 
AND DATE(date_purchased) > DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 year),'%Y-01-01') 
GROUP BY Years, Months 
ORDER BY Months ASC, Years ASC 

在你的迴應您的評論 - 你可以修改其中的日期部分子句爲您的兩個WHERE子句的組合

AND (
     (date(date_purchased) BETWEEN DATE_FORMAT(current_date,'%Y-01-01') AND current_date) 
    OR 
     (date(date_purchased) BETWEEN DATE_FORMAT(date_sub(current_date, INTERVAL 1 year),'%Y-01-01') AND date_sub(current_date, INTERVAL 1 year)) 
) 
+0

感謝您的支持。我唯一的問題是,前一年它總計整個月,而不是..因爲它是8日..二月的前8天。 – 2012-02-08 15:23:56

+0

ROCK SOLID !!非常感謝。試圖找出如何按月連續輸出結果。我想我通過編輯迴應了錯誤的方式。不要確定如何迴應代碼。 – 2012-02-08 16:46:11

0

你可以用while循環這樣的直接做到這一點。你可能寧願合併陣列,array_merge(如果沒有大量的數據):

foreach(array_merge($MTDcurrent, $MTDprevious) as $row){ 
    $row = 'your data'; 
} 

如果你的代碼是性能的關鍵,並且將使用大量的數據,您應該實現Iterator像這樣next功能:

public function next() { 
    $this->row = mysql_fetch_assoc($this->query); 
    if($this->row){ 
    return; 
    } 

    if(count($this->queries)){ 
    $this->query = mysql_query(array_shift($this->queries)); 
    $this->next(); 
    } 
} 

警告:這只是一個想法,不是您應該依賴的整個實現!

編輯等等,我有問題,你正在尋找mysql UNION statement