sql >> Databáze >  >> RDS >> PostgreSQL

Nalezení databázových dat, která nejlépe odpovídají uživatelským proměnným odpovědím

Pro každý sloupec můžete připojit hodnotu "enum". (Zdá se, že to je to hlavní, co vám chybí.)

V WHERE klauzuli, kterou pak můžete filtrovat podle věcí, které se musí rovnat 'TRUE' .

Použijte ORDER BY pro věci, které jsou 'MAYBE' . Porovnejte je s 'TRUE' a přenést toto srovnání na integer . Sečtěte výsledky těchto vsazených srovnání a seřaďte podle tohoto součtu sestupně.

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;

Vedlejší poznámka:Postgres nabízí výčty jako datové typy sám. Můžete změnit schéma tabulky místa konání tak, aby je používala, pak by spojení nebyla nutná.




  1. Jak přidat nový sloupec do tabulky za 2. nebo 3. sloupec v tabulce pomocí postgres?

  2. Jak nastavit časové pásmo xampp mysql a Apache?

  3. Problém s GROUP_CONCAT a Longtextem v MySQL

  4. jak zkontrolovat, zda sdružování připojení HikariCP funguje nebo nefunguje v Javě?