Описание набора диапазонов

DeadMorozBLR

Новичок
Описание набора диапазонов

Есть задача — описывать для категории товаров диапазоны цен на них для поиска. На выходе нужно получать диапазоны следующего вида:

до 100
от 100 до 200
от 200 до 300
свыше 300

Минимальный набор данных для описания такого набора диапазона — это набор границ диапазонов: 100, 200, 300. Я хочу положить их в соотв. таблицу:

Код:
+-----+
|value|
+-----+
|  100|
|  200|
|  300|
+-----+
Как из такой таблицы получить выборку вида:

Код:
+------+------+
|value1|value2|
+------+------+
|  NULL|   100|
|   100|   200|
|   200|   300|
|   300|  NULL|
+------+------+
 

zerkms

TDD infected
Команда форума
LEFT JOIN с условием > value
+ группировка и выборка MIN()

;-)
 

zerkms

TDD infected
Команда форума
Gas
думаю оптимизатор в итоге всё сведёт к одному...
 

DeadMorozBLR

Новичок
LEFT JOIN с условием > value
+ группировка и выборка MIN()
Код:
SELECT
    t1.value value1,
    MIN(t2.value) value2
FROM
    test t1
LEFT JOIN
    test t2
ON
    t2.value > t1.value
GROUP BY
    t1.value;
Возвращает то, что надо, только без первой записи :) Как бы это побороть?
 

DeadMorozBLR

Новичок
Код:
SELECT
    NULL,
    MIN(value)
FROM
    test  

UNION

SELECT
    t1.value value1,
    MIN(t2.value) value2
FROM
    test t1
LEFT JOIN
    test t2
ON
    t2.value > t1.value
GROUP BY
    t1.value;
Какой длиннющий запрос получается…
 

DeadMorozBLR

Новичок
zerkms
Нет, конечно. Просто такой запрос неудобно использовать для создания других запросов — ни как view с алгоритмом merge (невозможно), ни в конструкторах запросов наподобие Zend_Db.

Как я уже говорил, например, хочется подсчитать количество товаров в диапазонах: нужно присоединять таблицу товаров по полю "цена" (причем в обе части запроса) и группировать по диапазону. А тут группировка и так уже используется.
 
Сверху