2012-06-06 31 views
0

我有我試圖清理查詢:需要結合查詢與獨特和計數

我原來的查詢如下:

SELECT h.userid, c.firstname, c.lastname, h.domain, h.nextduedate, h.domainstatus, 
    (SELECT COUNT(status) 
    FROM tblinvoices i, tblinvoiceitems ii 
    WHERE i.userid =h.userid 
      AND i.id = ii.invoiceid 
     AND i.STATUS LIKE 'Unpaid' 
     AND i.TOTAL = 80 
     AND ii.description LIKE 'Hosted Domain%') 
    AS invoice_count 
FROM tblclients c, tblhosting h 
WHERE h.userid=c.id AND c.status='Active' 
    AND c.id NOT IN (1,2,3,4,5) 
    AND h.domain LIKE '%thisdomain.com' 
    AND h.nextduedate<='2012-06-06' 
ORDER BY h.domainstatus, h.nextduedate DESC 

它的工作原理相當不錯,但它不是100%準確。我得到的所有用戶的「nextduedate」比今天的日期更早,但是,有些用戶使用NULL nextduedate(帳戶已取消,但仍有未付費發票)的未付帳單。

該查詢給我22級的用戶,但如果我運行:

SELECT DISTINCT i.userid, COUNT(i.status) 
    FROM tblinvoices i, tblinvoiceitems ii 
    WHERE i.id = ii.invoiceid 
     AND i.STATUS LIKE 'Unpaid' 
     AND i.TOTAL = 80 
     AND ii.description LIKE 'Hosted Domain%') 

然後我得到26名的用戶(約8丟失發票)。

下一個到期日是真的顯示他們有多晚,這個查詢的主要重點是顯示所有的用戶與未付的發票。我試圖將第二個查詢與第一個查詢以幾種不同的方式結合起來,但我無法弄清楚,並且我認爲我鎖定了我的服務器。

理想我返回的行應該是這樣的:

用戶ID,名字,姓氏,域名,domainstatus,「交貨期」(這從理論上是最古老的發票之日起,我使用nextduedate因爲它很容易),invoicecount(未付發票的數量)

僅供參考,發票日期是在i.invoicedate

我將不勝感激幫助搞清楚如何優化這個查詢!

回答

1

你可以試試用GROUP BY

SELECT h.userid, c.firstname, c.lastname, h.domain, h.nextduedate, h.domainstatus, count(i.status) AS invoice_count 

FROM tblclients c, tblhosting h 
LEFT JOIN tblinvoices i ON i.userid =h.userid   
    AND i.STATUS LIKE 'Unpaid' 
    AND i.TOTAL = 80 
LEFT JOIN tblinvoiceitems ii ON i.id = ii.invoiceid 
    AND ii.description LIKE 'Hosted Domain%' 


WHERE h.userid=c.id AND c.status='Active' 
    AND c.id NOT IN (1,2,3,4,5) 
    AND h.domain LIKE '%thisdomain.com' 
    AND h.nextduedate<='2012-06-06' 
GROUP BY h.userid 
ORDER BY h.domainstatus, h.nextduedate DESC 
+0

更換DISTINCT我可以看到製作上發送查詢變化,但該查詢已經被自己的作品。我試圖在合併兩個查詢時使用GROUP BY,但我無法弄清楚如何正確地將它提供給我所需的所有信息。實際上,我從來沒有像原始查詢那樣使用除COUNT(狀態)以外的其他任何東西。 – Dizzy49

+0

這是我試圖結合兩個查詢 'SELECT h.userid,c.firstname,c.lastname,h.domain,h.nextduedate,h.domainstatus,i.userid,COUNT(i.status) \t FROM tblclients C,tblhosting小時,tblinvoices I,II tblinvoiceitems \t WHERE h.userid = c.id AND c.status = '有效' \t AND c.id NOT IN(1,2,3,4) \t和h 。域LIKE '%domain.com' AND i.userid = h.userid \t \t AND i.id = ii.invoiceid \t \t AND i.STATUS LIKE '未付' \t \t AND i.TOTAL = 80 \t \t AND ii.description LIKE '%託管' \t AND h.nextduedate <= '2012-06-06' GROUP BY i.userid \t ORDER BY h.domainstatus,h.nextduedate DESC ' – Dizzy49

+0

對不起,還沒有想出如何格式化評論:( – Dizzy49