mysql:按姓名和艺术家对spotify曲目进行分组

ruarlubt  于 2021-06-24  发布在  Mysql
关注(0)|答案(0)|浏览(229)

我已经从spotify下载了曲目信息,但许多歌曲都有多个版本,我想尝试整合。例如,在美国,蕾哈娜的《脑中的爱》有6个不同的记录。在本例中,我可以简单地比较曲目名称和艺术家id,并确定它们都(大致)是同一首歌。然而,当一个曲目有几个艺术家,它会变得(我认为)有点困难。
我有三个与本期相关的表格:tracks,它包含了我要分析的一些有趣的数据,每个曲目的一行,艺术家,它包含了每个艺术家的一行,track\u artists,它包含了每个曲目艺术家对的一行,track\u artists\u id自动递增,我会有一个或多个曲目行(取决于发行数量),rihanna有一个艺术家行,drake有一个艺术家行,然后对于曲目中的每一行,track\u artists有两行:因此下面的查询会给出以下结果:

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\u artist,second\u artist组成的组。
这真的是最好的方法吗?特别是考虑到有些歌曲有超过10位艺术家合作?我的数据库建得不好吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题