Трябва да имате две таблици:една за колони, една за диапазони от колони. С това една проста заявка ще извлече това, от което се нуждаете.
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, вероятно ще трябва да извлечете всички редове и да използвате езика от страна на клиента, за да направите съвпадението.