2012-02-14 3 views
2

Я хотел бы добавить новый ценовой диапазон в таблицу, но прежде чем мне нужно будет проверить, включен ли мой ценовой диапазон или часть какого-либо другого ценового диапазона.Как проверить, включен ли диапазон цен в любой ценовой диапазон с помощью MySQL?

Вот пример:

Мой диапазон цен стол:

| minimum | maximum | 
--------------------- 
|  1 |  100 | 
|  201 |  300 | 
|  301 |  400 | 
  • Если я представить [50200], я должен отвергнуть его, потому что 50 входит в диапазон [1,100].
  • Если я отправлю [175,201], я должен отклонить его, потому что 201 входит в диапазон [201,300].
  • Если я отправлю [350,380], я должен отклонить его, потому что 350 и 380 включены в диапазон [301,400].
  • Если я отправлю [120,190], я должен принять, потому что 120 и 190 не включены ни в какой диапазон.

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

ответ

1

Это должно работать (предполагая, что таблица называется ranges, и новые параметры диапазона @low и @high соответственно):

IF(NOT EXISTS (SELECT * 
       FROM ranges 
       WHERE @low BETWEEN minimum AND maximum) 
    AND 
    NOT EXISTS (SELECT * 
       FROM ranges 
       WHERE @high BETWEEN minimum AND maximum)) 
BEGIN 
    INSERT INTO ranges 
     (minumum, maximum) 
     VALUES 
     (@low, @high) 
END 

Конечно, это может быть дальше соединялись/конденсируют:

IF(NOT EXISTS (SELECT * 
       FROM ranges 
       WHERE @low BETWEEN minimum AND maximum 
        OR @high BETWEEN minimum AND maximum)) 
BEGIN 
    INSERT INTO ranges 
     (minumum, maximum) 
     VALUES 
     (@low, @high) 
END 

И еще дальше:

INSERT INTO ranges 
    (minimum, maximum) 
SELECT T.minimum, T.maximum 
    FROM (SELECT @low as minimum, @high as maximum) T 
WHERE NOT EXISTS (SELECT * 
        FROM ranges 
        WHERE @low BETWEEN minimum AND maximum 
         OR @high BETWEEN minimum AND maximum) 
0

Предполагая, что ваши новые значения для тестирования: rangestart, rangeend, выберите строку, имеющую либо начало, либо конец между minimum AND maximum. Любая результирующая строка указывает, что диапазон перекрывается и не может быть добавлен. Если этот запрос не возвращает строк, диапазон не перекрывается и действителен.

SELECT 
    TRUE 
FROM ranges 
WHERE 
    rangestart BETWEEN minimum AND maximum 
    OR rangeend BETWEEN minimum AND maximum 
0

попробовать это:

SELECT 'True' as Result 
    FROM PriceRange 
WHERE iStartValue BETWEEN minimum AND maximum OR 
     iEndValue BETWEEN minimum AND maximum 
1
INSERT INTO priceranges 
    SELECT * FROM 
    (SELECT <newminprice>, <newmaxprice>) AS baseview 
    WHERE NOT EXISTS (
    SELECT * FROM ranges 
    WHERE <newminprice> BETWEEN minimum AND maximum 
     OR <newmaxprice> BETWEEN minimum AND maximum 
) 

должен сделать это в одном запросе

+0

отлично работает для меня –

Смежные вопросы