Мне нужно правильно упорядочить строковый столбец, содержащий группу чисел с разделителями, например:
1
1.1
1.1.1
1.2
1.2.1
1.10
2
2.1
Эти числа используются для определения дерева: например, 1
и 2
являются узлами верхнего уровня, а 1.1
, 1.2
и 1.10
являются непосредственными потомками 1
. Дерево может быть сколь угодно глубоким, поэтому по сути не существует верхней границы для числа периодов в каждой записи (хотя на практике ограничение на количество символов в столбце будет обеспечивать это).
Проблема, с которой я сталкиваюсь, заключается в том, что стандартная операция ORDER BY
в SQL будет перечислять 1.10
перед 1.2
. Это, конечно, ожидается, но, к сожалению, не то, что я хочу, так как 10 > 2
. Есть ли эффективный способ получить мой заказ? Я использую MySQL.
Обратите внимание, что я не обязательно использую эту кодировку для дерева, поэтому, если есть другая кодировка, которую проще заказать, чем смело предлагать ее. Тем не менее, одна приятная вещь, которую предлагает мне эта структура, - это простой способ восстановить все вышестоящие родительские узлы или все нижестоящие дочерние узлы за один проход, что не может работать с более типичной моделью row / parent_row (насколько это возможно). насколько я знаю). Например, учитывая идентификатор 1.2.1.4.5
, я знаю, что четыре предка - 1
, 1.2
, 1.2.1
и 1.2.1.4
, и все дети (как прямые потомки, так и дети детей) будут иметь идентификатор, который начинается с 1.2.1.4.5.
.