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

At finde databasedata, der passer bedst til brugervariablesvar

Du kan tilslutte "enum"-værdien for hver kolonne. (Det ser ud til at være det vigtigste, du mangler.)

I WHERE klausul kan du derefter filtrere efter de ting, der skal være lig med 'TRUE' .

Brug en ORDER BY for de ting, der er 'MAYBE' . Sammenlign dem med 'TRUE' og cast den sammenligning til et integer . Sum resultaterne af de støbte sammenligninger og sorter efter den sum faldende.

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;

Sidebemærkning:Postgres tilbyder selv enums som datatyper. Du kan ændre spillestedsbordets skema for at bruge disse, så ville sammenføjningerne ikke være nødvendige.




  1. #1066 - Ikke unik tabel/alias:

  2. Forespørgselsoptimering:max() i underforespørgsel

  3. Fjern helt MariaDB eller MySQL fra CentOS 7 eller RHEL 7

  4. Sådan undgår du en databaseracetilstand, når du manuelt øger PK af ny række