MySQL:按名称和艺术家分组Spotify曲目

时间:2018-04-19 15:23:56

标签: mysql sql spotify

我已经从Spotify下载了曲目信息,但很多歌曲都有多个版本,我想尝试合并。例如,在美国有Rihanna的“Love On The Brain”有6种不同的曲目记录。在这种情况下,我可以简单地比较曲目名称和艺术家ID,并确定它们都是(大致)相同的歌曲。然而,当一个曲目有几位艺术家时,它(我认为)变得更加困难。

我有三个表连接到此问题:轨道,其中包含每个轨道的行,其中包含一些我想要分析的有趣数据,艺术家,其中包含每个艺术家的行,以及Track_artists,其中包含每个轨道的行-artist对,具有自动递增的track_artist_id。所以对于歌曲工作,我有一个或多个Track行(取决于发行的数量),1个艺术家行为Rihanna和1个为Drake,然后对于Tracks中的每一行,Track_artists中有2行: 因此,以下查询给出了以下结果:

select ta.track_id, ta.artist_id, a.name 
from track_artists ta inner join artists a on ta.artist_id=a.artist_id
inner join tracks t on t.track_id=ta.track_id 
where t.name='Work';

+------------------------+------------------------+-------------+
| track_id               | artist_id              | name        |
+------------------------+------------------------+-------------+
| 0ghpAAdn5OmxvI7ul5DR2B | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna     |
| 0ghpAAdn5OmxvI7ul5DR2B | 3TVXtAsR1Inumwj472S9r4 | Drake       |
| 32lmL4vQAAotg6MrJnhlQZ | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna     |
| 32lmL4vQAAotg6MrJnhlQZ | 3TVXtAsR1Inumwj472S9r4 | Drake       |
| 4aRD0bzvsBD0MAB4LcsRSM | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna     |
| 4aRD0bzvsBD0MAB4LcsRSM | 3TVXtAsR1Inumwj472S9r4 | Drake       |
| 4m6D70k5xMmCDCB19u7Bi0 | 5pKCCKE2ajJHZ9KAiaK11H | Rihanna     |
| 4m6D70k5xMmCDCB19u7Bi0 | 3TVXtAsR1Inumwj472S9r4 | Drake       |
+------------------------+------------------------+-------------+

对我来说很明显,这些都是同一首歌,但是将它们分组的最佳方式是什么?我的解决方案是:

select t.track_id,t.name,a1.artist_id first_artist,a2.artist_id second_artist
from track_artists a1 inner join tracks t on t.track_id=a1.track_id 
inner join track_artists a2 on t.track_id=a2.track_id 
where t.name='Work' and 
a1.artist_id = (select artist_id from track_artists where track_id = t.track_id limit 1) and 
a2.artist_id = (select artist_id from track_artists where track_id = t.track_id limit 1,1);
+------------------------+------+------------------------+------------------------+
| track_id               | name | first_artist           | second_artist          |
+------------------------+------+------------------------+------------------------+
| 0ghpAAdn5OmxvI7ul5DR2B | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
| 32lmL4vQAAotg6MrJnhlQZ | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
| 4aRD0bzvsBD0MAB4LcsRSM | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
| 4m6D70k5xMmCDCB19u7Bi0 | Work | 5pKCCKE2ajJHZ9KAiaK11H | 3TVXtAsR1Inumwj472S9r4 |
+------------------------+------+------------------------+------------------------+

然后只需按t.name,first_artist,second_artist添加一个组。

这真的是最好的方法吗?特别是考虑到一些歌曲中有超过10位艺术家合作?我的数据库构建得不好吗?

0 个答案:

没有答案