Во-первых, если вы хотите сделать заказ нестандартным способом (без использования PK или алфавита в поле имени), вам нужно добавить поле для определения веса заказа различных объектов.Я бы добавил поле в таблицу, которое называется что-то вроде ordering_weight - вы не хотите использовать порядок имен полей или последовательность b / c, они являются зарезервированными словами SQL.
Во-вторых, вам нужен пункт order by:
ORDER BY top_level.ordering_weight, next_level.ordering_weight, ..., deepest_level.ordering_weight
Заметьте, что мой порядок по пунктам приказывает сначала по самому высокому уровню моего дерева, а затем по самому низкому или самому глубокому уровню дерева.
Конечно, не обращайте внимания на вышесказанное, если все вы ищете динамичныйуровень рекурсии.
Обычно, когда я вижу такие отношения родитель-ребенок, как это, я вижу людей, желающих сделать больше, чем 1 уровень рекурсии.Проблема с вашей схемой в том, что она не поддерживает динамические уровни рекурсии, как есть.Вы можете выбрать только дочерние элементы родительского уровня, каждый дополнительный уровень требует другого соединения (есть несколько умных способов преодолеть это, но они все еще требуют дополнительного SQL для каждого уровня).
Я думаю, что может быть более полезнымВам стоит взглянуть на Модель вложенного набора , которая позволяет запрашивать бесконечные уровни рекурсии.см .: http://en.wikipedia.org/wiki/Nested_set_model
Например, следующее дерево родительско-дочерних отношений чрезвычайно сложно при использовании стандартных объединений, но очень просто при использовании модели, такой как вложенный набор.
Category A
- Category B
- - Category D
- Category E
Category F
- Category G
- - Category H
- - - Category I
- - - - Category J