Да, название сбивает с толку, но я буду держать это простым. Представьте себе страницу с фотографией и на ней есть комментарии. Эти комментарии могут быть вложены, отвечая на них. Мне нужно найти правильный порядок сортировки для них.
Я храню эти иерархии, используя «родословную». Это текстовое, сплющенное значение позиции отдельного комментария в иерархии. Вот правильно отсортированная тема. Я только показываю столбец происхождения:
903
909
909-1404
1405
903 - первый комментарий, 909 - второй. 1404 является ответом на второй комментарий, и, наконец, 1405 является последним комментарием, без ответа. Вот как они должны быть отсортированы. Я изо всех сил пытаюсь достичь этого результата, хотя. Вот что я получу, если просто сделаю это:
ORDER BY lineage
1405
903
909
909-1404
Ошибка здесь в том, что 1405 должно быть внизу. Я знаю (+0) трюк, чтобы упорядочить текст, как это число:
ORDER BY (lineage + 0)
Что дает мне это:
903
909-1404
909
1405
На этот раз многопоточный комментарий (1404) неправильно отсортирован, он должен следовать за родителем (909).
Есть ли простой способ выполнить желаемую сортировку? Единственное, о чем я мог подумать, это заполнить идентификаторы комментариев нулями впереди, но это был бы невероятно болезненный процесс миграции, которого я отчаянно хочу избежать.