Sie können den "enum"-Wert für jede Spalte verbinden. (Das scheint die Hauptsache zu sein, die Sie vermissen.)
Im WHERE
-Klausel können Sie dann nach den Dingen filtern, die gleich 'TRUE'
sein müssen .
Verwenden Sie einen ORDER BY
für die Dinge, die 'MAYBE'
sind . Vergleichen Sie sie mit 'TRUE'
und wandeln Sie diesen Vergleich in eine integer
um . Summieren Sie die Ergebnisse dieser gecasteten Vergleiche und sortieren Sie absteigend nach dieser Summe.
SELECT v.venue_name
FROM venue_table v
INNER JOIN response_enum_table rp
ON rp.id = v.parking
INNER JOIN response_enum_table rd
ON rd.id = v.decorations
INNER JOIN response_enum_table rh
ON rh.id = v.hotel
-- INNER JOIN response_enum_table rx
-- ON rx.id = v.x
-- INNER JOIN response_enum_table ry
-- ON ry.id = v.y
-- ...
WHERE rh.value = 'TRUE'
-- AND rx.value = 'TRUE'
-- ...
ORDER BY (rp.value = 'TRUE')::integer
-- + (ry.value = 'TRUE')::integer
-- ...
DESC;
Randnotiz:Postgres bietet Enums selbst als Datentypen an. Sie könnten das Schema der Venue-Tabelle ändern, um diese zu verwenden, dann wären die Joins nicht notwendig.