以下mysql查詢將在每個用戶名後輸出一列用戶名和一系列5列,這些用戶名是5個計數的結果。將動態表的計數總和作爲列MYSQL
SELECT f.username,
(SELECT COUNT(id) FROM sites s WHERE s.username = f.username) site_count,
(SELECT COUNT(id) FROM banners b WHERE b.username = f.username) banner_count,
(SELECT COUNT(id) FROM favorites fa WHERE fa.username = f.username) favorite_count,
(SELECT COUNT(id) FROM social_posts so WHERE so.username = f.username) social_count,
(SELECT COUNT(id) FROM stream_updates st WHERE st.username = f.username) stream_count
FROM members f
WHERE f.username
IN (SELECT friend2 as username FROM list_friends WHERE friend1 = :user
AND friend2 <> :user)
OR f.username
IN (SELECT friend1 as username FROM list_friends WHERE friend2 = :user
AND friend1 <> :user)
OR f.username = :user
輸出示例:
| username | site_count | banner_count | favorite_count | social_count | stream_count |
+----------+------------+--------------+----------------+--------------+--------------+
| user1 | 7 | 12 | 3 | 5 | 11 |
| user2 | 2 | 1 | 12 | 1 | 0 |
| user3 | 5 | 7 | 4 | 9 | 25 |
我所希望達到的結果是每一行的總和:
| username | site_count | banner_count | favorite_count | social_count | stream_count |
+----------+------------+--------------+----------------+--------------+--------------+
| | 14 | 20 | 19 | 15 | 36 |
可惜只是包裝他們SUM不會削減它,我希望它是那麼簡單。這將花費每個用戶的每個計數的總和,這是毫無用處的。例如,如果用戶1的計數返回5,則執行5的總和不會改變結果。由於IN語句中的f.username和用戶名不同,因此group by將無法工作,因此無法如此分組。我試圖通過f.username來做一個組,也嘗試了按用戶名分組,所有結果都沒有改變。 – Bruce
好吧,然後..可能是簡單的方法來做到這一點是計數出來的sql.if使用PHP只是在PHP計數他們 –
這可能實際上是路要走,但我希望基於SQL的解決方案,因爲我必須反正爲數據建立連接,並且所有的數據都被索引,所以我想盡可能在mysql中完成。 :) – Bruce