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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Организация произвольной сортировки
 
 автор: Temnovit   (01.11.2008 в 15:28)   письмо автору
 
 

Здравствуйте!

Делаю CMS. Пункты меню хранятся в таблице MySQL и нужно реализовать возможность менять порядок вывода этих пунктов на экран, тоесть дать пользователю возможность передвигать вниз-вверх любые пункты меню.

Я сделал так:
id INT    -- первичный ключ
title VARCHAR(50)    -- название раздела
order_num INT     -- числовой значение для рортировки (порядковый номер в списке)


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

Заранее благодарен за помощь!

  Ответить  
 
 автор: Trianon   (01.11.2008 в 15:39)   письмо автору
 
   для: Temnovit   (01.11.2008 в 15:28)
 

А по моему, самый простой, надежный и естественный подход.
Проще придумать сложно.

  Ответить  
 
 автор: Temnovit   (01.11.2008 в 15:46)   письмо автору
 
   для: Trianon   (01.11.2008 в 15:39)
 

Ну вся проблемы в функциях, которые будут выполнять задачу

<?
function move_up() {

}

function 
move_dоwn() {

}
?>


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

  Ответить  
 
 автор: Trianon   (01.11.2008 в 16:20)   письмо автору
 
   для: Temnovit   (01.11.2008 в 15:46)
 

по идее смена порядка должна выполняться одним запросом UPDATE
UPDATE tbl
SET num = замена(num)
WHERE ...
где замена(num) - выражение, вычисляющее новый номер по старому.
функции IF() вкупе со сложением и вычитанием должно хватить.

  Ответить  
Rambler's Top100
вверх

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