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

MySQL:kiểm tra xem một giá trị có nằm trong một khoảng thời gian không

Bạn nên có hai bảng:một cho cột, một cho phạm vi cột. Với điều đó, một truy vấn đơn giản sẽ truy xuất những gì bạn cần.

CREATE TABLE foo (
    foo_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (foo_id)
)
ENGINE=InnoDB;

CREATE TABLE foo_range (
    foo_id INT(10) UNSIGNED NOT NULL,
    column_from INT(10) UNSIGNED NOT NULL,
    column_to INT(10) UNSIGNED NOT NULL,
    INDEX foo_range_fk1 (foo_id),
    CONSTRAINT foo_range_fk1 FOREIGN KEY (foo_id) REFERENCES foo (foo_id)
)
ENGINE=InnoDB;

INSERT INTO foo(foo_id)
VALUES (1), (2), (3);

INSERT INTO foo_range(foo_id, column_from, column_to)
VALUES (1, 400, 500), (2, 45, 74), (2, 23, 25), (3, 12, 14), (3, 19, 21);

SELECT foo_id
FROM foo_range
WHERE 421 BETWEEN column_from AND column_to;

Và trên thực tế, bảng chính thậm chí không cần thiết trừ khi bạn muốn lưu trữ dữ liệu bổ sung :)

Nếu bạn gặp khó khăn với thiết kế DB khác, có thể bạn sẽ phải truy xuất tất cả các hàng và sử dụng ngôn ngữ phía máy khách của mình để thực hiện đối sánh.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL:Hiển thị các bản ghi đã bỏ qua sau khi TẢI THÔNG TIN DỮ LIỆU?

  2. Truy vấn cho bài đăng và thẻ trong cùng một truy vấn

  3. Hiệu suất của truy vấn phụ trong mệnh đề IN với các bảng lớn trong truy vấn xóa

  4. Làm cách nào để khắc phục JSON bị định dạng sai trong PHP?

  5. Cách nâng cấp MySQL trên CentOS