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

MySQL:проверете дали дадена стойност се съдържа в диапазонен интервал

Трябва да имате две таблици:една за колони, една за диапазони от колони. С това една проста заявка ще извлече това, от което се нуждаете.

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;

И всъщност основната таблица дори не е необходима, освен ако не искате да съхранявате допълнителни данни :)

Ако сте останали с другия дизайн на DB, вероятно ще трябва да извлечете всички редове и да използвате езика от страна на клиента, за да направите съвпадението.



  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?

  2. Как да настроя репликация от MySQL към MongoDB?

  3. Мога ли да направя mysql Select, Update и Delete в една заявка?

  4. Има ли еквивалент за @@error на SQL Server в MySQL

  5. Проблем със спирателните думи на MySQL в пълен текст