PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Encontrar dados de banco de dados que melhor se adaptam às respostas das variáveis ​​do usuário


Você pode juntar o valor "enum" para cada coluna. (Isso parece ser a principal coisa que você está perdendo.)

No WHERE cláusula você pode filtrar as coisas que devem ser iguais a 'TRUE' .

Use um ORDER BY para as coisas que são 'MAYBE' . Compare-os com 'TRUE' e converta essa comparação para um integer . Some os resultados dessas comparações lançadas e classifique por essa soma 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 lateral:O Postgres oferece enums como tipos de dados em si. Você poderia alterar o esquema da mesa de local para usá-los, então as junções não seriam necessárias.