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

Форум PHP

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

 

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

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

тема: Изменение последовательности вывода
 
 автор: Qiao   (30.09.2007 в 12:00)   письмо автору
 
 

Есть каталоги, в них страницы. Всё выводится через БД.
Нужно иметь возможность менять последовательность вывода каталогов или страниц (в их списке).

Слышал, что такое осуществляется приписыванием им номеров, а затем их изменением и вывод через ORDER BY position. Всё логично.

Но как-то неудобно получается. Создаётся первая папка, ей приписывается позиция 1. Второй - 2 и т.д.. Если я хочу поменять их местами, то придётся сначала папке 2 записать какой-нибудь неиспользованный номер, чтобы освободить номер 2, затем папке 1 записать 2, а папке 2 записать 1.
Муторно. Если использолвать дробные числа, то со временем там каша будет.

Подскажите, пожалуйста, как эта проблема обычно решается?

   
 
 автор: cheops   (30.09.2007 в 13:17)   письмо автору
 
   для: Qiao   (30.09.2007 в 12:00)
 

Возможно вас заинтересует тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=43871.

   
 
 автор: Qiao   (30.09.2007 в 13:56)   письмо автору
 
   для: cheops   (30.09.2007 в 13:17)
 

Тема заинтересовала, но к сожалению там нет решения. Ведь если подставить им другие номера, то изменится их порядок относительно других категорий.

   
 
 автор: cheops   (30.09.2007 в 14:30)   письмо автору
 
   для: Qiao   (30.09.2007 в 13:56)
 

Не очень понятно, что имеется в виду? Вы хотите поменять местами две записи или осуществить что-то другое?

   
 
 автор: Qiao   (30.09.2007 в 15:42)   письмо автору
 
   для: cheops   (30.09.2007 в 14:30)
 

Нужно как-то менять порядок.
В предыдущем посте напутал, не обращайте внимания. Ваш SQL запрос в той теке подходит (позиция не уникальна). Но если надо поместить каталог на другую позицию, а другие не трогать, то всё равно это муторно.


Думаю можно сделать так - каталогу указывается номер позиции, в которой он должен находится. А далее все что находится между его старой и новой позицией, сдвигается вверх или вниз. Например, можно так:

//Известны старая($old) и новая ($new) позиции

mysql_query(“UPDATE tbl SET position = 100 WHERE position = $old") // Переписываем старую позицию во временное место

if ($new > $old){ // Если каталог сдвигается на верхнюю позицию
for{i=$old+1; i <=$new; i++) //Сдвигаем промежуточные позиции вниз
mysql_query("UPDATE tbl SET position = i-1 WHERE position = 'i' ");
}
else{то же с обратными знаками}

mysql_query(“UPDATE tbl SET position = $new WHERE position = 100 // Переписываем каталог на новую позицию


Оптимален ли такой код? А то запросов к базе многова-то получается (хотя с перестановкой мест получится столько же)

   
Rambler's Top100
вверх

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