Ik heb een website met daarop een top 10 van meest beluisterde nummers.
Een album of single mag daar echter maar 1 keer in voorkomen: dit om te voorkomen
dat er bijvoorbeeld 3 tracks van eenzelfde album in de top10 voorkomen.
Dit is echter simpeler gezegd dan gedaan, en ik kom er dan ook echt niet uit.
Dit zijn de tabellen die relevant zijn:
main_statistics_listened.trackid verwijst naar main_tracks.id
main_tracks.type verwijst naar main_albums ofwel main_singles
en main_tracks.typeid is dan main_albums.id of main_singles.id
dit is de query die ik nu heb:
kan iemand mij alsjeblieeeeeft hiermee helpen
ik zit hier nu al weken mijn kop op te breken maar kom er niet uit!
Een album of single mag daar echter maar 1 keer in voorkomen: dit om te voorkomen
dat er bijvoorbeeld 3 tracks van eenzelfde album in de top10 voorkomen.
Dit is echter simpeler gezegd dan gedaan, en ik kom er dan ook echt niet uit.
Dit zijn de tabellen die relevant zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| CREATE TABLE IF NOT EXISTS `main_statistics_listened` (
`id` int(11) NOT NULL auto_increment,
`remote_ip` varchar(16) default NULL,
`trackid` int(11) default NULL,
`siteshopid` int(11) default NULL,
`timestamp` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `remote_ip` (`remote_ip`),
KEY `trackid` (`trackid`),
KEY `siteshopid` (`siteshopid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `main_tracks` (
`id` int(11) NOT NULL auto_increment,
`artistid` int(11) default NULL,
`albumnumber` int(11) default NULL,
`name` varchar(250) default NULL,
`previewtime` int(11) default NULL,
`fullpreview` enum('0','1') NOT NULL,
`artist1` varchar(250) NOT NULL default '',
`artist2` varchar(250) NOT NULL default '',
`composer` varchar(250) default NULL,
`lyricist` varchar(250) default NULL,
`isrc` varchar(250) default NULL,
`promobomb` enum('1','0') default '0',
`priceid` int(11) NOT NULL default '0',
`key` varchar(250) NOT NULL default '0',
`filesize` int(11) NOT NULL default '0',
`seconds` float NOT NULL default '0',
`type` enum('album','single') NOT NULL default 'album',
`typeid` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `typeid` (`typeid`),
KEY `priceid` (`priceid`),
KEY `artistid` (`artistid`),
KEY `type` (`type`),
KEY `albumnumber` (`albumnumber`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `main_albums` (
`id` int(11) NOT NULL auto_increment,
`artistid` int(11) default NULL,
`title` varchar(250) default NULL,
`year` int(11) default NULL,
`ean` varchar(250) default NULL,
`rightsid` int(11) NOT NULL default '0',
`salestartdate` date default NULL,
`frontcover` varchar(250) default NULL,
`fullpriceid` int(11) default NULL,
`onlyfull` enum('0','1') default '0',
`visible` enum('0','1') default '0',
`adddate` date NOT NULL default '0000-00-00',
`isreleased` enum('0','1','2') NOT NULL default '0',
`releasedate` datetime default NULL,
PRIMARY KEY (`id`),
KEY `fullpriceid` (`fullpriceid`),
KEY `artistid` (`artistid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `main_singles` (
`id` int(11) NOT NULL auto_increment,
`artistid` int(11) NOT NULL default '0',
`title` varchar(250) default NULL,
`year` int(11) default NULL,
`ean` varchar(250) default NULL,
`rightsid` int(11) NOT NULL default '0',
`salestartdate` date default NULL,
`frontcover` varchar(250) default NULL,
`visible` enum('0','1') default '0',
`adddate` date NOT NULL default '0000-00-00',
`isreleased` enum('0','1','2') NOT NULL default '0',
`releasedate` datetime default NULL,
PRIMARY KEY (`id`),
KEY `artistid` (`artistid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
main_statistics_listened.trackid verwijst naar main_tracks.id
main_tracks.type verwijst naar main_albums ofwel main_singles
en main_tracks.typeid is dan main_albums.id of main_singles.id
dit is de query die ik nu heb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| SELECT
SQL_CALC_FOUND_ROWS DISTINCT `main_tracks`.`typeid`,
`trackid`, COUNT(`trackid`) AS `times_listened`,
`main_tracks`.`name` AS `tracktitle`, `main_tracks`.`type`,
CASE `main_tracks`.`type`
WHEN 'single' THEN (SELECT `frontcover` FROM `main_singles` WHERE `id` = `main_tracks`.`typeid`)
WHEN 'album' THEN (SELECT `frontcover` FROM `main_albums` WHERE `id` = `main_tracks`.`typeid`)
END AS `frontcover`,
`main_artists`.`id` AS `artistid`, `main_artists`.`name` AS `artistname`, `main_artists`.`username`, `main_artists`.`labelusername`, `main_artists`.`genreid`,
CASE `main_artists`.`labelusername`
WHEN '0' THEN '0'
ELSE (SELECT `activated` FROM `main_labels` WHERE `username` = `main_artists`.`labelusername`)
END AS `labelactivated`,
`main_genres`.`title` AS `genre`,
`main_picture`.`picname` AS `artistimage`
FROM `main_statistics_listened`
INNER JOIN `main_tracks` ON `main_statistics_listened`.`trackid` = `main_tracks`.`id`
INNER JOIN `main_artists` ON `main_tracks`.`artistid` = `main_artists`.`id`
INNER JOIN `main_genres` ON `main_artists`.`genreid` = `main_genres`.`id`
LEFT JOIN `main_labels` ON `main_artists`.`labelusername` = `main_labels`.`username`
LEFT JOIN `main_picture` ON (`main_artists`.`id` = `main_picture`.`artist_id` AND `main_picture`.`user_type` = 'artist')
WHERE (`main_artists`.`activated` = '1' OR `main_labels`.`activated` = '1')
AND `siteshopid`= '0'
GROUP BY `main_tracks`.`typeid`
ORDER BY `times_listened` DESC LIMIT 0, 12 |
kan iemand mij alsjeblieeeeeft hiermee helpen