2013-05-03 66 views
-1

我有一個mysql查詢返回一個行數組。我需要從一列中獲得不同值的計數。 我的查詢是動態的,其中由php評估的多個條件更改WHERE子句,所以如果可能的話,我真的想在一個查詢中完成所有操作,以避免重複每個動態條件。Mysql運行計數明顯內另一個查詢?

這裏是我想怎樣做一個簡單的版本 -

如果這表示我的SQL表的一個非常簡單的版本:

Column1, Column2, Column3, Group, Active 
    a , b , c , 1 , YES 
    d , e , f, , 2 , YES 
    g , h , i , 1 , YES 
    j , k , l , 3 , NO 

我願做這樣的事情:

"SELECT Column1, Column2, Column3, Group, 
(SELECT COUNT(DISTINCT Group) FROM 'table') AS totalGroups 
FROM 'table' 
WHERE Active like 'YES';" 

我想要的結果是,我可以報告:

一)託塔在查詢

mysql_num_rows($result) should equal = 3 

b)中不同組

的總數L行
$phparray['totalgroups'] should equal = 2 
(Right now, 'totalgroups' equals = 3) 

(1)可以這樣做?目前,'totalgroups'返回3而不是2。我可以讓它使用與查詢的其餘部分相同的「Where」子句嗎?

在我實際的代碼,這要複雜得多,我的計數返回1945的時候我只希望它返回2. :)

(2)是否有更好的方式來做到這一點?

我試過php的array_unique()array_count_values(),但array_unique()不會對多維數組工作,我不能讓array_count_values()正常工作。

我看了很多其他問題,但找不到有人問這個問題。 我回顧了MYSQL手冊的RE子查詢,但沒有說明您是否可以共享Where子句。

如果你必須有我的實際代碼才能回答這個問題(而不是上面的演示代表),請讓我知道。這是超過兩頁與所有的PHP動態限定符,所以我決定爲了清晰起見編寫演示代碼。

+0

對不起,什麼必須是一個令人困惑的問題。我一直在研究幾個小時,並且找不到可行的答案。我試過COUNT(DISTINCT table.Group)AS totalGroups,它返回正確的值,但只返回一行。其他行不在查詢中。我覺得我錯過了一些簡單的... – dwlorimer 2013-05-03 15:16:16

回答

2

您是否試圖獲得表格中所有記錄的列表,以及每行上的活動行數和唯一活動組的計數?

如果是的話是這樣的: -

SELECT Column1, Column2, Column3, Group, ActiveDistinctGroups.ActiveCnt, ActiveGroups.ActiveCnt 
FROM 'table' a 
CROSS JOIN (SELECT COUNT(DISTINCT Group) AS ActiveCnt FROM 'table' WHERE Active like 'YES') AS ActiveDistinctGroups 
CROSS JOIN (SELECT COUNT(Group) AS ActiveCnt FROM 'table' WHERE Active like 'YES') AS ActiveGroups 
WHERE Active like 'YES' 

如果你真的需要避免額外的WHERE子句: -

SELECT Column1, Column2, Column3, Group, ActiveDistinctGroups.ActiveCnt, ActiveGroups.ActiveCnt 
FROM 'table' a 
INNER JOIN (SELECT Active, COUNT(DISTINCT Group) AS ActiveCnt FROM 'table' GROUP BY Active) AS ActiveDistinctGroups ON a.Active = ActiveDistinctGroups.Active 
INNER JOIN (SELECT ActiveCOUNT(Group) AS ActiveCnt FROM 'table' GROUP BY Active) AS ActiveGroups ON a.Active = ActiveGroups.Active 
WHERE a.Active like 'YES' 
+0

是的,我想將所有記錄返回到一個數組中,以及唯一活動組的計數。 我可以通過在結果上運行mysql_num_rows來獲得組的總數。我真的只想把「where」子句放在底部。它是否必須進入每個子查詢中,還是有辦法避免這種情況? – dwlorimer 2013-05-04 19:09:26

+0

編輯添加一個版本,其中只檢查一次激活檢查。 – Kickstart 2013-05-04 21:04:12

+0

謝謝!我會在下次我在我的電腦上試試! – dwlorimer 2013-05-04 22:24:47