Как сортировать нумерованый список в запросе mysql?

Вурдалак

Продвинутый новичок
Вот зачем ты делаешь это:
потом беру последнее из них, увеличиваю на 1, и получаю 001.002.004 - это ключ для нового комментария.
? Это типа ветвь комментария? Тогда не понимаю зачем ты ищешь
decimal_id RLIKE '^001.002.[0-9]+$'
Или что? Не понятно. Налицо какая-то непродуманность проектирования БД.
 

Вурдалак

Продвинутый новичок
fixxxer, зачем менять точку на единицу? Можно просто убрать. Зачем дописывать единицу?
 

simbatron

Новичок
Вот зачем ты делаешь это:

? Это типа ветвь комментария? Тогда не понимаю зачем ты ищешь

Или что? Не понятно. Налицо какая-то непродуманность проектирования БД.
Просто я не знаю как по другому найти последний комментарий в уровне.
Вообще то тут наверно можно как то запрос составить так чтоб выдача содержала сразу только последний комментарий в уровне, но я пока не додумался.
Может потом придумаю, упрощу. Это я сходу так написал.
 

simbatron

Новичок
1) определяемся с максимальным уровнем вложенности, пусть 4
2) дополняем нулями:

3) меняем точку на 1, дописываем в начале 1



4) получили нужный нам bigint :)

можно оптимальнее но не вижу особого смысла. один хрен btree примерно одинаково.
С этим уже проблем нет. Уровень вложенности бесконечный и все работает.
Сейчас смущает только:
1. сложность процесса обработки поля decimal_id (не очень это красиво выглядит, но работает нормально, не тормозит ни сколько)
2. в базу приходится пихать лишние байты (нули которые добавляются спереди)
3. тонкое место при нахождении последнего комментария в уровне (при увеличении количества комментариев в уровне возрастает нагрузка, а этого наверно можно избежать)

вот и все.
а так все пучком работает и не тормозит (это же комментарии, их не может быть тысячи в уровне, и даже в одной статье, их максимум десятки)
 

Вурдалак

Продвинутый новичок
Древовидный вид комментариев я никогда не писал, но уверяю, что у тебя очень плохое решение. Уж лучше Nested Sets.
 

iceman

говнокодер
simbatron
последний комментарий можно найти отсортировав по дате комментария, не так ли?
 

simbatron

Новичок
simbatron
последний комментарий можно найти отсортировав по дате комментария, не так ли?
Нет нельзя. Нужен не последний комментарий, а последний комментарий в уровне, он может быть добавлен после создания комментария в первом уровне.
Да и зачем сортировать по дате, когда есть поле со значениями Auto-increment?

Древовидный вид комментариев я никогда не писал, но уверяю, что у тебя очень плохое решение. Уж лучше Nested Sets.
Да? :) тогда может Вы знаете как получить последний узел в уровне дерева. Мне NESTED SETS показался таким монстром, что я почувствовал себя маленьким.

Если я в будущем захочу сделать классную древовидную структуру то я начну долбить Ваш "Вариант 3-й: можно составить функцию, однозначно переводящую это выражение в целое число и обратно", с целью найти способ получения последнего элемента в уровне прямо в столбце decimal_id содержащего INTEGER значения. Вот это будет классно, если удастся.
 

Вурдалак

Продвинутый новичок
В древовидном виде отображения отвечают на какое-то определённое сообщение. Значит известен id этого сообщения. Значит нужно просто добавить запись, которая будет дочерней для узла с этим id.
 

simbatron

Новичок
В древовидном виде отображения отвечают на какое-то определённое сообщение. Значит известен id этого сообщения. Значит нужно просто добавить запись, которая будет дочерней для узла с этим id.
О да, ты навел меня на классную идею! а сортировать внутри уровня можно по полю со свойством Auto-increment
Попробую, отпишусь.
 
Сверху