2011-07-04 56 views
1

我有以下兩個表 - userprofile和videoinfo。 videoInfo對用戶配置文件具有FK。在MySQL中執行COUNT

CREATE TABLE `userprofile_userprofile` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `full_name` varchar(100) NOT NULL, 
    ... 
) 

CREATE TABLE `userprofile_videoinfo` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(256) NOT NULL, 
    `uploaded_by_id` int(11) NOT NULL, 
    ... 
    KEY `userprofile_videoinfo_e43a31e7` (`uploaded_by_id`), 
    CONSTRAINT `uploaded_by_id_refs_id_492ba9396be0968c` FOREIGN KEY (`uploaded_by_id`) REFERENCES `userprofile_userprofile` (`id`) 
) 

什麼是SQL語句,我會使用,以顯示每部影片都有USERPROFILE通過COUNT計數和秩序?

回答

4
SELECT u.id as userId, count(v.uploaded_by_id) as videosCount 
FROM userprofile_userprofile u 
    LEFT OUTER JOIN userprofile_videoinfo v 
     ON v.uploaded_by_id = u.id 
GROUP BY u.id 
ORDER BY count(v.uploaded_by_id) DESC 
+0

+1:外連接是最好的,如果OP需要看到計數爲所有用戶。內部JOIN不會顯示計數爲零的用戶。 –

+0

@ Scorpi0:對於沒有視頻上傳的所有用戶配置文件,這實際上給出的計數爲1。它爲什麼這樣做,我該如何解決這個問題? – David542

+2

@ David542:已更新,您必須計入v.uploaded_by_id而不是*! –

0
SELECT uploaded_by_id, COUNT(ID) as cnt 
FROM userprofile_videoinfo 
GROUP BY uploaded_by_id 
ORDER BY cnt DESC;