PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Trovare i dati del database che meglio si adattano alle risposte delle variabili dell'utente

Puoi unire il valore "enum" per ogni colonna. (Sembra essere la cosa principale che ti manca.)

Nel WHERE clausola puoi quindi filtrare per le cose che devono essere uguali a 'TRUE' .

Usa un ORDER BY per le cose che sono 'MAYBE' . Confrontali con 'TRUE' e lancia quel confronto su un integer . Somma i risultati di quei confronti espressi e ordina in base alla somma decrescente.

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;

Nota a margine:Postgres offre le enumerazioni come tipi di dati stessi. Potresti modificare lo schema della tabella delle sedi per utilizzarli, quindi i join non sarebbero necessari.