сортировка записей в таблицы

serega86

Новичок
сортировка записей в таблицы

В таблице есть поле типа текст в нём значения

1.a
2.a
10.a
11.a

при упорядочивании по этому полю мне выдается

1.a
10.a
11.a
2.a

хотя нужно чтоб цифры шли попорядку ( как сверху приведено )

Подскажите можно это как-нибудь реализовать ?
 

serega86

Новичок
это и есть реальный пример текста
так у меня помечины сообщения

1.a
1.5.a - ( ответ на сообщение под номером с id - 1)
1.5.12.a - ( ответ на ответ сообщения с под номером с id - 5 , 12 id самого сообщения)
2.a

и т д
 

Фанат

oncle terrible
Команда форума
не надо так помечать сообщения
потому что отсортировать у тебя не получится.

здесь недавно был похожий топик.
найди и почитай, что я отвечал его автору
или можешь сразу отправиться в раздел "вопрос-ответ" за информацией о хранении деревьев в базе.
 

serega86

Новичок
.... нетривиальная задача оказалась
а какой из методов хранения дерева лучше подойдёт для хранения комментариев - как на livejournal.com ( ответы на сообщения , ответы на ответы и т д ... т е дерево будет только с " правой " кроной )
?
 

Фанат

oncle terrible
Команда форума
практически такое же, как у тебя - materialized path
только в виде, пригодном к сортировке.
+ в каждой записи хранить идентификатор комментируемого поста.
 

serega86

Новичок
там такая же проблема возникает
там в примере
http://phpclub.ru/faq/wakka.php?wakka=Tree/Mp&v=rqh#MpIntro
при упорядочивании 14. - вершина вылезет в середине ...
с помощью like тоже не вытащишь упорядочено ...
 

Фанат

oncle terrible
Команда форума
тьфу.
я и не знал, что на такую фигню ссылку даю.

ты так и не сподобился найти предыдущий топик?
ну ладно, повторюсь.
путь строишь из выровненных нулями айдишников.
то есть, добавление комментария делается тремя запросами.
сначала селектом получаем путь родителя, потом инсерт с пустым путем, дальше получение айди, и сразу за этим - апдейт пути=путь родителя плюс айди записи выровенная нулями функцией str_pad
то есть, поле путь у тебя будет выглядеть так:
0001
00010005 - ( ответ на сообщение под номером с id - 1)
000100050012 - ( ответ на ответ сообщения с под номером с id - 5 , 12 id самого сообщения)
0002
тип поля - варчар
 

serega86

Новичок
да я тоже думал над таким вариантом .... , больно криво получаеться , допустим 7 уровневый комментарий будет выглядеть :
00010005001200130014001500160017
выравневание по такому длинному полю неспособствует быстродействию .... да и ограничения на количество коментариев будет - не больше 10к ( хотя я невидел чтоб столько глибо оставляли, но всёже потенциальный баг )

Спасибо за помошь, наверно так и сделаю, если чёнить по лучше не придумаю :)
 

Фанат

oncle terrible
Команда форума
не надо бояться за быстродействие.
никаких проблем с ним не будет.
можешь выровнять по 6 нулям, чтобы оставили миллион.

вообще, до достижения программистом определенного уровня опыта, надо ему запретить употреблять слово "быстродействие".
потому что все равно - лепят чудовищные тормоза на пустом месте, и обязательно пугаются до колик совершенно безобидных действий.
 

Фанат

oncle terrible
Команда форума
ты, главное, не забудь в таблицу комментариев добавить поле - идентификатор записи, которую они комментируют.
сделаешь по этому полю индекс, и все у тебя будет летать со свистом.
 

serega86

Новичок
...эм... зачем это поле вообще нужно ?
и зачем по нему индекс, если поиска по нему не будет ?
 
Сверху