PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Намиране на данни от база данни, които най-добре отговарят на променливите отговори на потребителите

Можете да присъедините стойността "enum" за всяка колона. (Изглежда това е основното нещо, което пропускате.)

В WHERE след това можете да филтрирате за нещата, които трябва да са равни на 'TRUE' .

Използвайте ORDER BY за нещата, които са 'MAYBE' . Сравнете ги с 'TRUE' и прехвърлете това сравнение към integer . Сумирайте резултатите от тези сравнения и сортирайте по тази сума в низходящ ред.

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;

Странична бележка:Postgres сам предлага enum като типове данни. Бихте могли да промените схемата на таблицата на мястото, за да ги използвате, тогава обединенията няма да са необходими.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свържете три таблици, като една от тях няма първичен ключ

  2. Избройте всички последователности в Postgres db 8.1 с SQL

  3. Режим на заключване на PostgreSQL

  4. Съветни заключване или NOWAIT, за да избегнете чакането на заключени редове?

  5. PostgreSQL уникални индекси и регистър на низовете