Диапазоны на нескольких столбцах - PullRequest
0 голосов
/ 29 января 2012

У меня есть таблица с 2 столбцами, колой и колбом, которые представляют диапазон чисел.

Пример задачи:

cola - colb
1    - 10
11   - 22
33   - 66
67   - 67
  • , если ввод 7-8Я хотел бы запрос, который извлек бы диапазон 1-10.
  • , если ввод 67 - 80, я хотел бы запрос, который извлек бы 67 - 67

Пример запроса:

SELECT * 
  FROM example 
 WHERE vala >= cola 
   AND valb <= colb

Первый критерий работаетотлично с приведенным выше запросом, однако он падает, когда cola = colb, т.е. .. 67 - 67.


Выше приведен простой пример моей проблемы. Проблема на самом деле в диапазоне Ips.Cola - Colb2 = диапазон Ip.Я включил в случае, если чего-то не хватает в приведенном выше примере.

   SELECT *
     FROM `static_allocation`

    WHERE INET_ATON('$network_addr')   >= INET_ATON(network_addr)
      AND INET_ATON('$broadcast_addr') <= INET_ATON(broadcast_addr)

    LIMIT 1

Редактировать:

ОК, похоже, я немного не прав ..

Данные таблицы

10.0.0.0 - 10.0.0.15 
10.0.0.16 - 10.0.0.16

однако, когда япопробуйте выбрать 10.0.0.16 - 10.0.0.20, запись не найдется ..

1 Ответ

1 голос
/ 30 января 2012

Если вы ищете первый диапазон, который содержит хотя бы часть блока, попробуйте условие типа:

vala <= colb and cola <= valb

Это говорит о том, что диапазон поиска [vala,valb] должен частично перекрываться с целевым диапазоном [cola,colb].

В SQL:

select  *
from    example
where   vala <= colb and cola <= valb
order by
        cola -- Lowest network range
limit   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...