簡體   English   中英

合並兩個mysql COUNT(*)結果,不同的列

[英]Combine two mysql COUNT(*) results, different columns

我正在嘗試合並以下查詢的計數:

  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

無論如何,如果要合並這兩個查詢,並為每個“ otheruser”將count(*)加在一起

最直接的方法是使用SUM / Condition

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

演示

更新資料

感謝deltab和Michael Buen,我清理了SUM和GROUP BY語句

最直接的方法是只使用兩個查詢。
使用2個查詢請求2個不同的數據集絕對沒有害處,但使用一個查詢執行此操作不是一個原因。

您可以像這樣將它們與UNION結合使用:

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)
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)'];
}

我相信此查詢應能按預期工作。 原始文件唯一的問題是雙重別名和兩個不同字段的分組。 這可以在2個單獨的查詢中進行,但是結合起來就無法完成(至少是別名,對於GROUP BY則不這樣認為)。

希望這對您有用。

更新

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM