《MYSQL數據庫mySQL count多個表的數據實例詳解》要點:
本文介紹了MYSQL數據庫mySQL count多個表的數據實例詳解,希望對您有用。如果有疑問,可以聯系我們。
MYSQL應用一、實現需求
MYSQL應用最近在做成就系統,成就中有很多維度都和數量有關,比如用戶粉絲數達到多少50個,授予 名揚四海 稱號,用戶點贊達到 100 次,授予 點贊圣手 稱號等等.
MYSQL應用粉絲數在 user_relation
表
MYSQL應用點贊數在 user_praise
表
MYSQL應用按照以往的做法,如果需要查詢用戶的這些數據,又因為數據是在不同的表中,所以往往會分開多條 SQL 查詢,比如:
MYSQL應用
SELECT count(*) mysh FROM user_relation WHERE other_uid =123456;
MYSQL應用
SELECT count(*) dzss FROM user_praise WHERE praise_uid = 123456;
MYSQL應用然后將查詢出的數據封裝在一個對象中,返回給客戶端或者另做他用,如果需要統計的表少點還可以,但是像成就系統中,往往有各種各樣的成就,我們現在涉及到 12 張表,如果按照這種來查詢,那么就要寫 12 條 SQL 查詢 12 次,這讓人有點不爽.
MYSQL應用二、能否用一條 SQL 語句實現呢
MYSQL應用答案是肯定的
MYSQL應用像這種將多個表不同的數據,整合在一個表中的時候,我們可以采用 UNION
操作.
MYSQL應用首先將使用 UNION
改寫以上語句:
MYSQL應用
SELECT wrzm,mysh,sgbh FROM (
SELECT count(*) wrzm,0 mysh,0 sgbh FROM user_witness WHERE plan_uid = 123456
UNION ALL
SELECT 0 wrzm,count(*) mysh,0 sgbh FROM user_relation WHERE other_uid = 123456
UNION ALL
SELECT 0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE uid = 123456 AND status = 1
) t;
MYSQL應用按照上面查詢出來的結果為:
MYSQL應用
mysql_count_results
MYSQL應用我們發現這個結果已經有點像樣了,如果能將表中 wrzm
,mysh
,sgbh
的數據三行變成一行,那就好了.于是我們很自然可以想到用 SUM
(當然一開始我沒想到,經過朋友提醒),于是改寫上面的 SQL :
MYSQL應用
SELECT sum(wrzm) wrzm,sum(mysh) mysh,sum(sgbh) sgbh FROM (
SELECT count(*) wrzm,0 mysh,0 sgbh FROM user_witness WHERE plan_uid = 123456
UNION ALL
SELECT 0 wrzm,count(*) mysh,0 sgbh FROM user_relation WHERE other_uid = 123456
UNION ALL
SELECT 0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE uid = 123456 AND status = 1
) t;
MYSQL應用然后得出的結果為:
MYSQL應用
mysql_count_result_2
MYSQL應用至此,得到了我們想要的結果,在一條 SQL 語句中實現了多個表的 count
統計.
MYSQL應用三、拓展
MYSQL應用如圖,我們能獲取到的僅僅是一個用戶的數據,但是我們需要統計的是 user_info
中的所有用戶,那么也很簡單,我們再次進行改寫:
MYSQL應用
SELECT uid,sum(wrzm) wrzm,sum(mysh) mysh,sum(sgbh) sgbh FROM (
SELECT plan_uid uid,count(*) wrzm,0 mysh,0 sgbh FROM user_witness
GROUP BY plan_uid
UNION ALL
SELECT other_uid uid,0 wrzm,count(*) mysh,0 sgbh FROM user_relation
GROUP BY other_uid
UNION ALL
SELECT uid,0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE status = 1
GROUP BY uid
) t GROUP BY uid;
MYSQL應用查詢結果為:
MYSQL應用
mysql_count_results_3
MYSQL應用在這個結果中,如果我們需要查看具體某一個用戶,那么在最后加上WHERE uid = 123456
即可,如果要排序的話,那么直接加上 ORDER BY
即可.
MYSQL應用總結
MYSQL應用以上就是這篇文章的全部內容了,希望本文的內容對大家在使用或者學習mysql的時候能有所幫助,如果有疑問大家可以留言交流.