sql >> Base de Datos >  >> RDS >> PostgreSQL

Encontrar los datos de la base de datos que mejor se adapten a las respuestas de las variables del usuario

Puede unir el valor "enumeración" para cada columna. (Eso parece ser lo principal que te estás perdiendo).

En el WHERE puede filtrar por las cosas que tienen que ser iguales a 'TRUE' .

Usa un ORDER BY por las cosas que son 'MAYBE' . Compáralos con 'TRUE' y convierta esa comparación en un integer . Sume los resultados de las comparaciones realizadas y ordene por esa suma de forma descendente.

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 al margen:Postgres ofrece enumeraciones como tipos de datos en sí. Puede cambiar el esquema de la tabla del lugar para usar estos, entonces las uniones no serían necesarias.