diff --git a/src/libs/database/impl/Artist.cpp b/src/libs/database/impl/Artist.cpp index 7f2302f7..267c0eee 100644 --- a/src/libs/database/impl/Artist.cpp +++ b/src/libs/database/impl/Artist.cpp @@ -464,7 +464,7 @@ Artist::getSimilarArtists(std::optional offset, std::optionalid()) .bind(self()->id()) .groupBy("a.id") - .orderBy("COUNT(*) DESC") + .orderBy("COUNT(*) DESC, RANDOM()") .limit(count ? static_cast(*count) : -1) .offset(offset ? static_cast(*offset) : -1)}; diff --git a/src/libs/database/impl/Release.cpp b/src/libs/database/impl/Release.cpp index 23646eaa..a50262ae 100644 --- a/src/libs/database/impl/Release.cpp +++ b/src/libs/database/impl/Release.cpp @@ -426,7 +426,7 @@ Release::getSimilarReleases(std::optional offset, std::optionalid()) .bind(self()->id()) .groupBy("r.id") - .orderBy("COUNT(*) DESC") + .orderBy("COUNT(*) DESC, RANDOM()") .limit(count ? static_cast(*count) : -1) .offset(offset ? static_cast(*offset) : -1)}; diff --git a/src/libs/database/impl/Track.cpp b/src/libs/database/impl/Track.cpp index 26dcc37f..04a16f1f 100644 --- a/src/libs/database/impl/Track.cpp +++ b/src/libs/database/impl/Track.cpp @@ -341,7 +341,7 @@ Track::getSimilarTracks(Session& session, " AND t_c.cluster_id IN (SELECT c.id FROM cluster c INNER JOIN track_cluster t_c ON t_c.cluster_id = c.id WHERE t_c.track_id IN (" + oss.str() + "))" " AND t.id NOT IN (" + oss.str() + ")") .groupBy("t.id") - .orderBy("COUNT(*) DESC") + .orderBy("COUNT(*) DESC, RANDOM()") .limit(size ? static_cast(*size) : -1) .offset(offset ? static_cast(*offset) : -1)}; diff --git a/src/libs/database/impl/TrackList.cpp b/src/libs/database/impl/TrackList.cpp index 47fb5a22..03a20d97 100644 --- a/src/libs/database/impl/TrackList.cpp +++ b/src/libs/database/impl/TrackList.cpp @@ -382,7 +382,7 @@ TrackList::getSimilarTracks(std::optional offset, std::optionalid()) .bind(self()->id()) .groupBy("t.id") - .orderBy("COUNT(*) DESC") + .orderBy("COUNT(*) DESC, RANDOM()") .limit(size ? static_cast(*size) : -1) .offset(offset ? static_cast(*offset) : -1)}; diff --git a/src/test/database/DatabaseTest.cpp b/src/test/database/DatabaseTest.cpp index b23a19a1..c5edcc1f 100644 --- a/src/test/database/DatabaseTest.cpp +++ b/src/test/database/DatabaseTest.cpp @@ -811,7 +811,13 @@ testMultipleTracksSingleClusterSimilarity(Session& session) const auto similarTracks {Track::getSimilarTracks(session, {tracks.front().getId()})}; CHECK(similarTracks.size() == tracks.size() - 1); for (auto similarTrack : similarTracks) - CHECK(std::find_if(std::next(std::cbegin(tracks), 1), std::cend(tracks), [&](const ScopedTrack& track) { return similarTrack.id() == track.getId(); }) != std::cend(tracks)); + { + CHECK(std::find_if(std::next(std::cbegin(tracks), 1), std::cend(tracks), + [&](const ScopedTrack& track) + { + return similarTrack.id() == track.getId(); + }) != std::cend(tracks)); + } } }