Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Перемещение позиций меню вверх или вниз.

Сообщения:  [1-10]   [11-16] 

 
 автор: oradev   (09.08.2007 в 17:33)   письмо автору
 
   для: Trianon   (07.08.2007 в 00:53)
 


Ну так что кто хочет показать как в MySQL реализовать обход дерева :)
А мы посмотрим и оценим!

   
 
 автор: Trianon   (07.08.2007 в 00:53)   письмо автору
 
   для: SHAman   (06.08.2007 в 15:27)
 

>Может, покажете, как вы имеете ввиду? Мы, просто, не понимаем друг друга. Или я вас)
>>теперь представьте себе, что у Вас 4-й элемент следует за 6-м , а 6-й за 5-м.(я назвал их первичные ключи)
Нарисуйте содержиое таблицы в этом случае. Покажите, как будет выглядеть запрос вывода данных в правильном порядке. Покажите, какой результат он выдаст.

   
 
 автор: SHAman   (06.08.2007 в 15:27)   письмо автору
 
   для: Trianon   (06.08.2007 в 13:33)
 

Все равно не понимаю в чем проблема...
установить after в 6, где id =4 и альбом = номер альбома
установить минимальный элемент из альбома в 0.

Опять два запроса... А с выводом - вообще нет проблем... Блин, чет я не догоняю подвоха... У меня вот так сделано и работает нормально... без коллизий. Для перемещения элемента вверх-вниз, требуется два запроса простеньких. Для вывода в нужном порядке - один.

Может, покажете, как вы имеете ввиду? Мы, просто, не понимаем друг друга. Или я вас)

   
 
 автор: Trianon   (06.08.2007 в 13:33)   письмо автору
 
   для: SHAman   (06.08.2007 в 13:21)
 

Связаный список - это метод хранения списка, при котором поле связи очередного элемента списка хранит ключ предыдущего элемента списка.

теперь представьте себе, что у Вас 4-й элемент следует за 6-м , а 6-й за 5-м.

   
 
 автор: SHAman   (06.08.2007 в 13:21)   письмо автору
 
   для: 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 не уникальное, то менее надежное.

   
 
 автор: Trianon   (06.08.2007 в 11:52)   письмо автору
 
   для: SHAman   (06.08.2007 в 11:50)
 

>Почему, для вывода нужно использовать много запросов?

>>при организации порядка элементов связным списком

В after у Вас хранятся ключи?
величины ключей могут быть не согласованы с позициями в списке

   
 
 автор: SHAman   (06.08.2007 в 11:50)   письмо автору
 
   для: Trianon   (04.08.2007 в 00:16)
 

Почему, для вывода нужно использовать много запросов? У меня есть табличка, в которой хранятся треки из музыкальных альбомов. Естественно, все треки всех альбомов в одной табличке. И я сделал этот самый after. И треки перемещаются нормально. А при выводе, мне хватает одного запроса, где подставляется только id альбома.

SELECT * FROM `trecks` WHERE `id_album`=$id_album ORDER BY after

Или типа того. Может, я, конечно, не все понимаю?

   
 
 автор: Trianon   (04.08.2007 в 00:16)   письмо автору
 
   для: SHAman   (03.08.2007 в 16:23)
 

при организации порядка элементов связным списком, изменение позиции одного элемента, конечно, можно уложить в пару запросов.
Но при этом придется делать довольно много (или один, но весьма неоптимаольный) запросов при выводе объектов - фактически - по числу объектов. Либо загружать вывод SQL-запроса в память целиком и сортировать его средствами php, что тоже не всегда приемлемо.

   
 
 автор: SHAman   (03.08.2007 в 16:23)   письмо автору
 
   для: kollince   (03.08.2007 в 13:48)
 

А по-моему, это неудачная мысль. А что, если юзер возьмет, да и удалит все эти непонятные циферки? Или сделает две, три, четыре одинаковых? Это ненадежно и неявно. Я делаю связанный список. Добавляешь в таблицу поле after. Если это первый элемент, его after равно 0. Если второй - 1 и т.д. Получается, что каждая запись показывает на своего предшественника. Сортировка идет по этому полю. В админку добавляю стрелочки Вверх-вниз. Если вверх, то проверяем не на самом ли верху, а если нет, то предшественнику присваиваем after инициатора, а инициатору - after предшественника. Единственное что, лично у меня получается два запроса, что не радует, конечно. Но MySQL знаю фигово, возможно, есть решение в один запрос. Оптимально вообще сделать after уникальным, но при моем решении в два запроса такой фокус не пройдет, потому что между запросами получатся два одинаковых значения after.

Кстати, мож кто знает, как в таком случае пооптимальнее перемещать записи?

   
 
 автор: kollince   (03.08.2007 в 13:48)   письмо автору
 
   для: Faraon   (03.08.2007 в 13:41)
 

Спасибо большое! Это очень хорошая мысль!

   

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования