2012-05-05 98 views
0

我試圖計數以下查詢組合:合併兩個MySQL COUNT(*)的結果,不同的列

SELECT recipient AS otheruser, COUNT(*) 
    FROM privatemessages 
    WHERE sender = '$userid' 
GROUP BY recipient 

    SELECT sender AS otheruser, COUNT(*) 
    FROM privatemessages 
    WHERE recipient = '$userid' 
GROUP BY sender 

如果有反正這兩個查詢結合起來,並添加COUNT(*)共同爲每個 'otheruser'

+0

你可以試試聯合國離子不知道,如果你正在尋找 –

+0

通過「結合計數」我想你想添加「計數」的數字在一起?或者我錯了,你只是想結合查詢?如果您所要做的只是將COUNT的值加在一起,那麼在查詢調用後只需將它們相加即可。 –

回答

2

最直接的方法是使用SUM /條件

SELECT 
    CASE WHEN sender = '$userid' THEN recipient else sender END AS OtherUser, 
    SUM(sender = '$userid') AS RCount, 
    SUM(recipient = '$userid') AS SCount, 
    COUNT(*) total 
FROM 
    privatemessages 
WHERE 
    '$userid' IN (sender , recipient) 
GROUP BY 
    OtherUser 

DEMO

更新

我清理SUM和GROUP BY感謝語句deltab和邁克爾·布埃諾

+0

對於GROUP BY,你不能只使用GROUP BY OtherUser嗎? – deltab

+2

另外,'CASE當發送者='$ userid'那麼1 ELSE 0 END'可以簡化爲'sender ='$ userid',當爲true時爲1,當爲false時爲0。 – deltab

+1

@ConradFrix是@deltab是正確的,你可以做'SUM(sender = blah)',集合函數(SUM,COUNT等)忽略空結果或空表達式。一個'(條件爲1,否則0結束)'不保存來自空值的查詢;集合函數已經爲你做了。看到這個例子:http://www.sqlfiddle.com/#!2/7bc43/1 –

0

最簡單的方法就是使用2個查詢。
使用2個查詢請求2個不同的數據集絕對沒有壞處,但沒有一個理由使用2個查詢來完成。然後在搜索結果的功能

SELECT otheruser, COUNT(*) FROM 
(SELECT recipient AS otheruser 
FROM privatemessages 
WHERE sender = '$userid' 
GROUP BY recipient 
UNION 
SELECT sender AS otheruser 
FROM privatemessages 
WHERE recipient = '$userid' 
GROUP BY sender) 
0

您可以用UNION這樣將它們結合起來。你的原創唯一的問題是雙重別名和你的兩個不同領域的分組。這是可能的2個單獨的查詢,但結合起來,它不能完成(至少是別名,對於GROUP BY不這麼認爲)。

希望這對你有用。

UPDATE

一個偉大替代COUNT是簡單地使用num_rows ...因此,上面的查詢將是:

SELECT recipient AS r, sender AS s // can't use same alias 
FROM privatemessages 
WHERE s = '$userid' AND r = '$userid' 
GROUP BY s; 

,然後在結果函數,調用num_rows功能:

mysql_num_rows($result); 
-1
SELECT recipient AS r, sender AS s, COUNT(total) // can't use same alias 
FROM privatemessages 
WHERE sender = '$userid' AND recipient = '$userid' 
GROUP BY s; 

,調用數

while ($row = $result) { 
    echo $row['COUNT(total)']; 
} 

我相信這個查詢應該按預期工作:

+0

嗯我認爲wheres語句應該是一個'OR'而不是'AND' –

+0

看起來像你不知道如何使用num_rows –

+0

@ConradFrix OP最初調用兩個單獨的查詢,因此它應該是一個'AND',因爲它們是絕對單獨的,當它們在兩個單獨的查詢中被呈現時。 –

相關問題