|
|
|
|
|
для: Trianon
(07.08.2007 в 00:53)
| |
Ну так что кто хочет показать как в MySQL реализовать обход дерева :)
А мы посмотрим и оценим!
|
| |
|
|
|
|
|
|
|
для: SHAman
(06.08.2007 в 15:27)
| | >Может, покажете, как вы имеете ввиду? Мы, просто, не понимаем друг друга. Или я вас)
>>теперь представьте себе, что у Вас 4-й элемент следует за 6-м , а 6-й за 5-м.(я назвал их первичные ключи)
Нарисуйте содержиое таблицы в этом случае. Покажите, как будет выглядеть запрос вывода данных в правильном порядке. Покажите, какой результат он выдаст. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2007 в 13:33)
| | Все равно не понимаю в чем проблема...
установить after в 6, где id =4 и альбом = номер альбома
установить минимальный элемент из альбома в 0.
Опять два запроса... А с выводом - вообще нет проблем... Блин, чет я не догоняю подвоха... У меня вот так сделано и работает нормально... без коллизий. Для перемещения элемента вверх-вниз, требуется два запроса простеньких. Для вывода в нужном порядке - один.
Может, покажете, как вы имеете ввиду? Мы, просто, не понимаем друг друга. Или я вас) | |
|
|
|
|
|
|
|
для: SHAman
(06.08.2007 в 13:21)
| | Связаный список - это метод хранения списка, при котором поле связи очередного элемента списка хранит ключ предыдущего элемента списка.
теперь представьте себе, что у Вас 4-й элемент следует за 6-м , а 6-й за 5-м. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2007 в 11:52)
| | Так, что-то я не пойму. Связаный список - это когда один элемент его хранит данные о соседнем или соседних. Так?
В after хранится номер предыдущего элемента. Записи могут быть такими:
id | name | after | id_album
=====================
1 | раз | 0 | 1
2 | два | 1 | 1
3 | три | 2 | 1
4 | еще раз | 0 | 2
5 | еще два | 4 | 2
6 | еще три | 5 | 2
|
Пишем
SELECT * FROM `trecks` WHERE `id_album`=$id_album ORDER BY `after`
|
Еще можно в after хранить не id предыдущего элемента, а after предыдущего элемента. То же самое, в принципе, но, так как after не уникальное, то менее надежное. | |
|
|
|
|
|
|
|
для: SHAman
(06.08.2007 в 11:50)
| | >Почему, для вывода нужно использовать много запросов?
>>при организации порядка элементов связным списком
В after у Вас хранятся ключи?
величины ключей могут быть не согласованы с позициями в списке | |
|
|
|
|
|
|
|
для: Trianon
(04.08.2007 в 00:16)
| | Почему, для вывода нужно использовать много запросов? У меня есть табличка, в которой хранятся треки из музыкальных альбомов. Естественно, все треки всех альбомов в одной табличке. И я сделал этот самый after. И треки перемещаются нормально. А при выводе, мне хватает одного запроса, где подставляется только id альбома.
SELECT * FROM `trecks` WHERE `id_album`=$id_album ORDER BY after
|
Или типа того. Может, я, конечно, не все понимаю? | |
|
|
|
|
|
|
|
для: SHAman
(03.08.2007 в 16:23)
| | при организации порядка элементов связным списком, изменение позиции одного элемента, конечно, можно уложить в пару запросов.
Но при этом придется делать довольно много (или один, но весьма неоптимаольный) запросов при выводе объектов - фактически - по числу объектов. Либо загружать вывод SQL-запроса в память целиком и сортировать его средствами php, что тоже не всегда приемлемо. | |
|
|
|
|
|
|
|
для: kollince
(03.08.2007 в 13:48)
| | А по-моему, это неудачная мысль. А что, если юзер возьмет, да и удалит все эти непонятные циферки? Или сделает две, три, четыре одинаковых? Это ненадежно и неявно. Я делаю связанный список. Добавляешь в таблицу поле after. Если это первый элемент, его after равно 0. Если второй - 1 и т.д. Получается, что каждая запись показывает на своего предшественника. Сортировка идет по этому полю. В админку добавляю стрелочки Вверх-вниз. Если вверх, то проверяем не на самом ли верху, а если нет, то предшественнику присваиваем after инициатора, а инициатору - after предшественника. Единственное что, лично у меня получается два запроса, что не радует, конечно. Но MySQL знаю фигово, возможно, есть решение в один запрос. Оптимально вообще сделать after уникальным, но при моем решении в два запроса такой фокус не пройдет, потому что между запросами получатся два одинаковых значения after.
Кстати, мож кто знает, как в таком случае пооптимальнее перемещать записи? | |
|
|
|
|
|
|
|
для: Faraon
(03.08.2007 в 13:41)
| | Спасибо большое! Это очень хорошая мысль! | |
|
|
|
|