J'essaie de trouver le nombre de crédits vidéo d'un utilisateur particulier.Requête COUNT compliquée dans MySQL
Voici les trois tableaux qui sont pertinents:
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`)
)
CREATE TABLE `userprofile_videocredit` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`video_id` int(11) NOT NULL,
`profile_id` int(11) DEFAULT NULL,
KEY `userprofile_videocredit_fa26288c` (`video_id`),
KEY `userprofile_videocredit_141c6eec` (`profile_id`),
CONSTRAINT `profile_id_refs_id_31fc4a6405dffd9f` FOREIGN KEY (`profile_id`) REFERENCES `userprofile_userprofile` (`id`),
CONSTRAINT `video_id_refs_id_4dcff2eeed362a80` FOREIGN KEY (`video_id`) REFERENCES `userprofile_videoinfo` (`id`)
)
Le tableau est videoinfo
lorsqu'un utilisateur télécharge une vidéo, il recevra une liste de « uploaded_by ». Le tableau videocredit
sont tous les crédits pour un film donné. Il est totalement indépendant du téléchargement du film (c'est-à-dire qu'une vidéo peut être téléchargée par un utilisateur sans se créditer, et un utilisateur peut être crédité dans une vidéo qu'il n'a pas téléchargée).
En essayant de trouver le comte de vidéos d'un utilisateur a été crédité dans, je veux trouver:
# videos a user has uploaded + # of non duplicate-video credits uploaded by others
A titre d'exemple: si un utilisateur télécharge 5 vidéos appelé:
VideoME1, VideoME2, VideoME3, VideoME4, and VideoME5
(total = 5 videos [`videoinfo.uploaded_by_id`])
et a les crédits vidéo suivants:
VideoME1 (4 credits - director, writer, editor, choreographer)
VideoME2 (1 credit)
VideoOTHER1 (2 credits - writer, editor)
VideoOTHER2 (1 credit - writer)
(total = 8 video credits [`videocredit.profile_id`])
Le COUNT doit être 5 (vidéos mises en ligne) + 2 (non DUPLICAT e crédits de vidéo mises en ligne par d'autres) = 7. Si un utilisateur n'a pas de crédits vidéo, il doit = 0 (à savoir LEFT OUTER JOIN
).
Je suis en mesure de comprendre les CHEFS pour chacun des uploads/crédits, mais ne peut pas comprendre comment combiner les deux et se débarrasser des doublons. De quel SQL ai-je besoin pour faire ça? Je vous remercie.
D'ailleurs, c'est ce que j'ai actuellement pour chaque (individuel) COUNT:
mysql> SELECT full_name, v.video_id, COUNT(DISTINCT v.video_id) as cnt
-> FROM userprofile_userprofile u LEFT OUTER JOIN userprofile_videocredit v
-> ON u.id = V.profile_id
-> GROUP BY full_name
-> ORDER BY cnt DESC;
mysql> SELECT full_name, v.id, COUNT(v.uploaded_by_id) as cnt
-> FROM userprofile_userprofile u LEFT OUTER JOIN userprofile_videoinfo v
-> ON u.id = v.uploaded_by_id
-> GROUP BY full_name
-> ORDER BY cnt DESC;
super, un type:' vi.video_id' devrait être 'v.id' (il y en a deux cas, L1 et L3). Je vais mettre en place une nouvelle colonne pour count, mais je voulais juste voir comment faire cette requête SQL particulière Merci – David542
+1, merci de m'avoir fait réfléchir davantage sur ce qui était vraiment demandé –
typo * pas de type. – David542