sickboy
Новичок
еще один сложный запрос.
hi,
есть вот такие таблицы:
таблица учета скачивания треков.
таблица связывающая id трека с id альбомом
таблица связывающая id альбома с id исполнителем.
Суть задачи состоит в том, чтобы определить рейтинг популярности альбома на основе загрузок треков из этого альбома.
Рейтинг учитывается так:
1. подсчитать общее кол-во скачанных треков из одного альбома,
2. поделить это число на общее число треков в альбоме.
3. и вывести список альбомов упорядоченных по этому числу.
Первый пункт я сделал так:
получил:
со второго шага начинаются проблемы, как получить общее кол-во треков в альбоме, но только для выше отобранных альбомов?
Если для всех, то достаточно просто:
hi,
есть вот такие таблицы:
таблица учета скачивания треков.
PHP:
mysql> desc music_dl_count;
+---------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------------------+------+-----+---------+----------------+
| id_msdl | int(10) unsigned | NO | PRI | NULL | auto_increment |
| id_mst | smallint(5) unsigned | YES | | NULL | |
+---------+----------------------+------+-----+---------+----------------+
PHP:
mysql> desc music_tracks;
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| id_mt | int(10) unsigned | NO | PRI | NULL | auto_increment |
| id_ma | int(10) unsigned | NO | | | |
| track | varchar(255) | NO | MUL | | |
+-----------+---------------------+------+-----+---------+----------------+
PHP:
mysql> desc music_album;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id_ma | int(10) unsigned | NO | PRI | NULL | auto_increment |
| id_mz | int(10) unsigned | NO | | | |
| album | varchar(255) | NO | | | |
+-------+------------------+------+-----+---------+----------------+
Рейтинг учитывается так:
1. подсчитать общее кол-во скачанных треков из одного альбома,
2. поделить это число на общее число треков в альбоме.
3. и вывести список альбомов упорядоченных по этому числу.
Первый пункт я сделал так:
PHP:
select
count(distinct(id_msdl)) as dlc, id_mst from music_dl_count
inner join
music_tracks on music_tracks.id_mt=music_dl_count.id_mst
left join
music_album on music_album.id_ma=music_tracks.id_ma
group by
music_album.album order by dlc;
PHP:
+-----+--------+
| dlc | id_mst |
+-----+--------+
| 1 | 211 |
| 2 | 88 |
| 11 | 112 |
| 13 | 172 |
| 13 | 50 |
| 15 | 155 |
| 16 | 83 |
+-----+--------+
Если для всех, то достаточно просто:
PHP:
SELECT
music_album.id_ma, COUNT(*) AS tracks_count
FROM
music_album
LEFT JOIN
music_tracks
ON
music_album.id_ma=music_tracks.id_ma
GROUP BY
music_album.id_ma;