PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tìm dữ liệu cơ sở dữ liệu phù hợp nhất với phản hồi của biến người dùng

Bạn có thể nối giá trị "enum" cho mỗi cột. (Đó có vẻ là điều chính mà bạn đang thiếu.)

Trong WHERE sau đó bạn có thể lọc những thứ phải bằng 'TRUE' .

Sử dụng ORDER BY cho những thứ là 'MAYBE' . So sánh chúng với 'TRUE' và truyền so sánh đó thành một số nguyên integer . Tính tổng kết quả của các phép so sánh được đúc đó và sắp xếp theo tổng giảm dần.

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;

Lưu ý bên cạnh:Postgres cung cấp enums dưới dạng chính các kiểu dữ liệu. Bạn có thể thay đổi lược đồ của bảng địa điểm để sử dụng những thứ này, khi đó các phép nối sẽ không cần thiết.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Những vật thể lớn đáng sợ đó

  2. Kiểu dữ liệu của Postgres NUMERIC có thể lưu trữ các giá trị đã ký không?

  3. Cách chỉ định danh sách giá trị cho chuỗi postgresql

  4. Duy trì múi giờ ở loại timestamptz PostgreSQL

  5. Loại bỏ các hàng trùng lặp trong Postgres