sql >> Databasteknik >  >> RDS >> PostgreSQL

Hitta databasdata som bäst passar användarvariabelsvar

Du kan slå samman "enum"-värdet för varje kolumn. (Det verkar vara det viktigaste du saknar.)

I WHERE klausul kan du sedan filtrera efter de saker som måste vara lika med 'TRUE' .

Använd en ORDER BY för de saker som är 'MAYBE' . Jämför dem med 'TRUE' och kasta den jämförelsen till ett integer . Summera resultaten av de gjorda jämförelserna och sortera efter den summan fallande.

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;

Sidanteckning:Postgres erbjuder enums som datatyper själv. Du kan ändra lokalbordets schema för att använda dessa, då skulle anslutningarna inte vara nödvändiga.




  1. Hur man krypterar en lagrad procedur i SQL Server

  2. Hämta raderna med hjälp av join-fråga

  3. Utmaningslösningar för nummerseriegenerator – del 5

  4. Det går inte att ansluta till SQL Server med PHP