n'abend,
schön zu wissen wäre welches DBMS du denn benutzen willst. Mysql? PostgreSQL? [...] welche Version?
Das ist in soweit relevant, als dass manche Funktionen erst ab gewissen Versionen zur Verfügung stehen. MySQL kann bspw. SubSelects erst ab 4.1.
Wie und ob man dein Problem in einer Query (mit ggf. SubSelects und oder verwirrenden JOINS) lösen kann, weiss ich nicht. Ich bin allerdings auch kein Fan von hyperkomplexen SQL-Queries; zumindest nicht in Sachen MySQL.
IN ('traurig', 'langsam') liefert sowohl traurig als auch langsam, aber keine Schnittmenge.
Du könntest durchaus deine Abfrage auf diese Weise machen.
SELECT cd_id, mood, ranking FROM tablename WHERE mood IN ('traurig', 'langsam') ORDER BY ranking;
Dann bekommst du alle Datensätze, die den gewählten moods entsprechen, nach ranking sortiert. CDs, die mehrere der gewünschten moods entsprechen, werden dabei entsprechend oft in der Ergebnismenge vorkommen.
Würdes du obige Abfrage auf deine Demodaten loslassen, würdest du also etwa das folgende erhalten:
cd_id | mood | ranking
--------+---------------+---------
1 | traurig | 1
--------+---------------+---------
12 | traurig | 2
--------+---------------+---------
4 | langsam | 2
--------+---------------+---------
3 | traurig | 3
--------+---------------+---------
1 | langsam | 3
--------+---------------+---------
12 | langsam | 3
mit geschicktem Sortieren (im Dinne von gruppieren) der Daten, solltest du dein Ziel erreichen. Wenn du Probleme mit dem Finden einer geeigneten Struktur zur Analyse und Zwischenspeicherung deiner Daten hast, kannst du gerne wieder nachfragen.
Anmerkung:
'langsam' ist für mich übrigens kein "mood", sondern eher "pace" oder "tempo".
weiterhin schönen abend...
Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|