From 42315395fd6a6c56678511524aeb13d9d752db46 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 17 Apr 2024 19:04:52 +0200 Subject: [PATCH] Simplified queries --- src/libs/database/impl/Artist.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libs/database/impl/Artist.cpp b/src/libs/database/impl/Artist.cpp index ac944733..d038fbf3 100644 --- a/src/libs/database/impl/Artist.cpp +++ b/src/libs/database/impl/Artist.cpp @@ -97,21 +97,18 @@ namespace lms::db else if (params.clusters.size() > 1) { std::ostringstream oss; - oss << "a.id IN (SELECT DISTINCT a.id FROM artist a" - " INNER JOIN track t ON t.id = t_a_l.track_id" - " INNER JOIN track_artist_link t_a_l ON t_a_l.artist_id = a.id" - " INNER JOIN cluster c ON c.id = t_c.cluster_id" - " INNER JOIN track_cluster t_c ON t_c.track_id = t.id"; + oss << "a.id IN (SELECT DISTINCT t_a_l.artist_id FROM track_artist_link t_a_l" + " INNER JOIN track_cluster t_c ON t_c.track_id = t_a_l.track_id"; WhereClause clusterClause; for (const ClusterId clusterId : params.clusters) { - clusterClause.Or(WhereClause("c.id = ?")); + clusterClause.Or(WhereClause("t_c.cluster_id = ?")); query.bind(clusterId); } oss << " " << clusterClause.get(); - oss << " GROUP BY t.id,a.id HAVING COUNT(DISTINCT c.id) = " << params.clusters.size() << ")"; + oss << " GROUP BY t_a_l.track_id,t_a_l.artist_id HAVING COUNT(DISTINCT t_c.cluster_id) = " << params.clusters.size() << ")"; query.where(oss.str()); }