PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Finden von Datenbankdaten, die am besten zu Antworten von Benutzervariablen passen

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.