есть табличка справочника, типа есть группы в них группы или товары (как файлы-папки):
CREATE TABLE GOOD ( --товары
ID Integer NOT NULL, --первичный ключ
LEFTBOUND Integer NOT NULL,
RIGHTBOUND Integer NOT NULL,
PARENT Integer,--сылка на группу владельца, для первого уровня NULL
NAME Varchar(50) NOT NULL, --наименование группы или товара
ISGROUP Integer NOT NULL --признак группы: 0,1
);
правило: если товар А лежит в группе Б а та в группе С то:
C.LEFTBOUND<B.LEFTBOUND<A.LEFTBOUND=A.RIGHTBOUND<=B.RIGHTBOUND<=C.RIGHTBOUND
то есть диапозон LEFTBOUND ... RIGHTBOUND групп охватывает вложенные записи (групп и товаров)
для товаров (не групп) верно: LEFTBOUND=RIGHTBOUND
требуется написать запрос, упорядочивающий записи по иерархии, а среди записей одной ветки иерархии должно быть упорядочивание по (IsGroup,Name), например:
Группа 1
__Группа 1.1
____Товар 1.1.1
____Товар 1.1.2
__Товар 1.2
__Товар 1.3
Группа 2
__Группа 2.1
__Группа 2.2
вот такой запрос, дает иерархию, но не дает упорядоченности внутри веток иерархии:
SELECT g.ID, g.Name, g.ISGROUP, count(g2.ID) AS glevel
FROM GOOD g
LEFT JOIN GOOD g2 ON (g.LEFTBOUND BETWEEN g2.LEFTBOUND AND g2.RIGHTBOUND)
GROUP BY g.ID, g.Name, g.ISGROUP, g.LEFTBOUND
ORDER BY g.LEFTBOUND
поле glevel отвечает за уровень вложенности записи