2011-11-07 158 views
0

我訪問數據我的網站上有3個查詢,第一次查詢得到交易的網站上提供的完整列表:加入MySQL的子查詢

$listingquery = "SELECT * FROM table WHERE city = '$city' AND approved = '1' 
    AND enddate > NOW() ORDER BY id DESC"; 

下一個查詢獲取可用的交易商的數/列表:

$providerquery = "SELECT programname, category, COUNT(name) FROM table WHERE 
    city = '$city' AND approved='1' AND enddate > NOW() GROUP BY provider"; 

和第三查詢獲取類別的計數/列表在這個城市提供的交易商:

$categoryquery = "SELECT programname, category, COUNT(name) FROM table WHERE 
    city = '$city' AND approved='1' AND enddate > NOW() GROUP BY category"; 

有沒有辦法將所有這一切合併爲一個查詢?

在此先感謝!

+0

你的第二個查詢有一些有趣之處:你的意思是選擇'provider'列而不是'category'?另外,你不是通過'programname'在第二個或第三個查詢中進行分組; MySQL允許這樣做,但可能會返回隨機結果,除非每個提供者/類別都保證只有一個程序名。 –

+0

是的,這是一個錯誤,試圖一次做15件事情,它按程序名 – Mike

回答

0

你可能會得到一些無損的信息,但你可以試試這個:

SELECT * FROM table a 
    LEFT JOIN (
    SELECT programname, category, COUNT(name) 
    FROM table 
    WHERE city = '$city' AND approved='1' AND enddate > NOW() GROUP BY provider 
) b ON a.provider = b.provider 
    LEFT JOIN (
    SELECT programname, category, COUNT(name) 
    FROM table 
    WHERE city = '$city' AND approved='1' AND enddate > NOW() GROUP BY category 
) c ON a.category = b.category 
    WHERE a.city = '$city' AND a.approved = '1' 
    AND a.enddate > NOW() 
    ORDER BY a.id DESC; 

更新一個Where子句(有點):

SELECT * FROM table a 
    LEFT JOIN (
    SELECT programname, category, COUNT(name) 
    FROM table 
    WHERE enddate > NOW() GROUP BY provider 
) b ON a.provider = b.provider 
    LEFT JOIN (
    SELECT programname, category, COUNT(name) 
    FROM table 
    WHERE enddate > NOW() GROUP BY category 
) c ON a.category = b.category 
    WHERE a.city = '$city' AND a.approved = '1' 
    AND a.enddate > NOW() 
    AND b.city = a.city AND c.city = a.city 
    AND b.approved = a.approved AND c.approved = a.approved 
    ORDER BY a.id DESC; 
+0

分組我可以加入並將其拆分WHERE變量只定義一次?對我來說似乎多餘。我還是新手,所以我想盡快學習正確的做事方式。 – Mike

+0

@Mike一秒 – Neal

+0

@Mike我最近的更新可能**不是**的路要走。但它在某些方面是正確的 – Neal

0

我懷疑,這一切都是可能的/在單個查詢中是可行的,但無論哪種方式,您都不應該在MySQL中使用子查詢,否則會嚴重降低性能。喜歡連接而不是子查詢。

+0

我認爲我的術語是關閉的。尼爾斯的答案似乎是我使用的最合理的,只是試圖使它現在的工作:) – Mike

+0

@Mike祝你好運,如果你有你的解決方案。 –