У мене є таблиця з цією структурою:
CREATE TABLE IF NOT EXISTS `mydb`.`sizes` (
`id_size` INT NOT NULL ,
`cm_min` INT NOT NULL ,
`cm_max` INT NOT NULL ,
PRIMARY KEY (`id_size`) )
ENGINE = InnoDB;
Цей запит повертає ширину та висоту розміру 5:
select cm_min, cm_max from sizes where id_size = 5;
які є:
45, 56
Ну, я хочу отримати всі розміри, які мають cm_min або cm_max між цим діапазоном. Я торкнувся щось подібне:
http://sqlfiddle.com/#!2/83e93/51
Він працює, але є розміри, які не знаходяться між будь-яким діапазоном. Я маю на увазі, якщо у мене це є:
id_size cm_min cm_max
1 56 59
2 63 67
3 70 74
4 76 79
5 83 86
6 60 62
7 12 14
Якщо я "значу значення id_size 6, і явиконайте попередній запит, він "повертає 0 вибраних рядків, і я хочу отримати id_size розмірів вище і менше, ніж це, хоча не строго між значеннями. У цьому випадку повернеться:
id_size cm_min cm_max
1 56 59
2 63 67
Або, наприклад, якщо мають значення te id_size 7, що є другорядним значенням, мені потрібно отримати наступне незначне значення, у моєму випадку це:
id_size cm_min cm_max
1 56 59
Або якщо мені "вище значення," мені потрібен ідентифікатор розміру, який має другі більш високі значення.
Тоді, якщо перший запит, який я опублікував, не має жодного результату, я це роблю: http://sqlfiddle.com/#!2/83e93/32/0
Це працює для. Отже, моє питання: Чи можу я зробити те ж саме з одним запитом?
Я сподіваюся, що я зрозумів своє пояснення і буду вдячний за будь-яку допомогу. Заздалегідь спасибі.
Відповіді:
1 для відповіді № 1Нижче SQL допоможе вам розпочати роботу, яка поверне всі рядки, які є вищими або нижчими, ніж вибраний ідентифікатор, наприклад тут для id = 6
SELECT id_size
FROM sizes
WHERE (cm_min < 60 or cm_min > 62) and
(cm_max < 60 or cm_max > 62);
Оновлення - приклад
Нижче я подав більш детальний приклад до вашої потреби: Видалити LIMIT 1
якщо вам потрібні всі записи, нижчі та вищі
SELECT id_size , "lower"
FROM sizes
WHERE (cm_min < 12 AND cm_max < 12)
LIMIT 1
UNION
SELECT id_size , "HIGHER"
FROM sizes
WHERE (cm_min > 14 AND cm_max > 14)
LIMIT 1