If you feel like helping out experimenting, you could try this:
Play top tracks of an artist (I used Frank Ocean as an example). Note that no tracks with Frank Ocean feat somebody else appear in the playlist.
Run this SQL command in Postgres (just once! it'll say INSERT 0 NNN if successful):
- Code: Select all
insert into library.artisttoptrackplaycount (track_id, artist_id, rank, play_count)
select distinct on (lt.track_id) lt.id, aat.artist_id, att.rank, coalesce(tpc.play_count, 0) from library.filetag ft
inner join music.track at on ft.track_id = at.id
inner join music.track aat on ft.album_artist_id = aat.artist_id and at.track_name = aat.track_name
inner join library.track lt on lt.file_id = ft.file_id
inner join music.artisttoptrack att on att.track_id = aat.id and att.artist_id = aat.artist_id
left outer join library.trackplaycount tpc on tpc.track_id = at.id
where ft.artist_id <> ft.album_artist_id;
Play top tracks again. Frank Ocean feat XX now appears in the playlist, if you have Frank Ocean entered as Album Artist. And in artist radio playlists. Correct?
This change will be rolled back on every library scan. I'll try it myself for a while and build some test cases, if it works out well, I'll include it in the next release.
(it could take a little while to run, the database is not really optimized to look for tracks that way. but for now I'm only interested in whether this technique solves your problem)