2013-01-16 35 views
0

我很難在頁面上正確顯示數據。我正在運行查詢所有未付賬單的賬單報告,我希望將它們顯示在單個頁面上,未結餘額顯示爲餘額的年齡。因此,如果客戶ABC在過去一年有10張發票,其中一些有未結餘額,我希望在0-30/30-60/60-90 /和90+天以上的欄目中顯示這些餘額。這是我有什麼...如何獲取日期範圍內不同行中列出的mysql結果?

$sql17 = "SELECT $mysql_billing.primary_key, $mysql_billing.a_name, $mysql_billing.invoicedate, $mysql_billing.finaltotal, $mysql_billing_dates.paidtotal, 
($mysql_billing.finaltotal - $mysql_billing_dates.paidtotal) AS total 
FROM 
    (SELECT $mysql_billing.primary_key, $mysql_billing.a_name, $mysql_billing.login_username, $mysql_billing.invoicedate, 
    SUM($mysql_billing.custotal) AS finaltotal 
    FROM $mysql_billing where $today >= invoicedate AND $start_search_prev180_date <= invoicedate AND custotal != payments GROUP BY login_username) $mysql_billing 
LEFT JOIN 
    (SELECT $mysql_billing_dates.id, $mysql_billing_dates.username, 
    SUM($mysql_billing_dates.amount) AS paidtotal 
    FROM $mysql_billing_dates where complete != 'yes' GROUP BY username) $mysql_billing_dates 
ON ($mysql_billing.login_username = $mysql_billing_dates.username) 
GROUP BY a_name ORDER BY a_name ASC"; 

這似乎打印出結果,但你如何獲得結果到不同的列基於多個1日期變量?我必須做4個單獨的查詢嗎?

+0

你在做PHP嗎?我猜你會想在PHP中循環4個日期範圍,每次運行帶有日期變量的查詢並將結果放入數組中以供顯示。 –

+0

查詢和數據庫結構不太清楚。你可以請設置一個SQL小提琴。 http://sqlfiddle.com/ –

+0

好的,我做到了。我認爲我的查詢搞砸了,因爲結果甚至不是我想要的。鏈接在這裏。 http://sqlfiddle.com/#!2/6f49b/3/0 – user1710960

回答

1

您的SQL小提琴已關閉,但您的一些連接不正確。

SELECT 
    billing.a_name, 
    billing.finaltotal, 
    billing_dates.paidtotal, 
    (billing.finaltotal - billing_dates.paidtotal) AS total, 
    billing.TimePeriod 
FROM 
    (SELECT 
     a_name, 
     login_username, 
     SUM(custotal) AS finaltotal, 
     CASE 
     WHEN invoicedate > DATE_SUB(CURDATE(),INTERVAL 30 DAY) THEN '30' 
     WHEN invoicedate > DATE_SUB(CURDATE(),INTERVAL 60 DAY) THEN '60' 
     WHEN invoicedate > DATE_SUB(CURDATE(),INTERVAL 90 DAY) THEN '90' 
     ELSE '90+' 
     END AS TimePeriod 

    FROM billing 
    where CURDATE() >= invoicedate 
     AND CAST(20120601 AS DATETIME) <= invoicedate 
    GROUP BY login_username) billing 
LEFT JOIN 
    (SELECT 
     username, 
     SUM(amount) AS paidtotal 
    FROM billing_dates 
    GROUP BY username) billing_dates 
    ON (billing.a_name = billing_dates.username) 
ORDER BY a_name ASC; 

這裏是更新的Fiddle

+0

所以現在,它是拉正確的值,如何顯示這在4列根據發票的結果? – user1710960

+0

請看編輯回答和撥動以上。祝你好運 - 這應該讓你朝着正確的方向。假設硬編碼的日期實際上是今天,那麼這將工作(我更新你的桌子也會得到不同的結果) – sgeddes

+0

我更新了sqlfiddle http://sqlfiddle.com/#!2/996bc/1/0 – user1710960

0

我建議爲客戶選擇所有未完成的發票,然後使用代碼將這些發票組織到每個時間段的列表中。

爲此,使用單個查詢可能會更快,並且可以輕鬆對程序中的結果進行分類。

然後,您只需爲每個列表選取一個元素即可生成報表中的行。

+0

你會有這個過程的任何例子嗎? – user1710960

相關問題