|
|
|
| Есть каталоги, в них страницы. Всё выводится через БД.
Нужно иметь возможность менять последовательность вывода каталогов или страниц (в их списке).
Слышал, что такое осуществляется приписыванием им номеров, а затем их изменением и вывод через ORDER BY position. Всё логично.
Но как-то неудобно получается. Создаётся первая папка, ей приписывается позиция 1. Второй - 2 и т.д.. Если я хочу поменять их местами, то придётся сначала папке 2 записать какой-нибудь неиспользованный номер, чтобы освободить номер 2, затем папке 1 записать 2, а папке 2 записать 1.
Муторно. Если использолвать дробные числа, то со временем там каша будет.
Подскажите, пожалуйста, как эта проблема обычно решается? | |
|
|
|
|
|
|
|
|
для: cheops
(30.09.2007 в 13:17)
| | Тема заинтересовала, но к сожалению там нет решения. Ведь если подставить им другие номера, то изменится их порядок относительно других категорий. | |
|
|
|
|
|
|
|
для: Qiao
(30.09.2007 в 13:56)
| | Не очень понятно, что имеется в виду? Вы хотите поменять местами две записи или осуществить что-то другое? | |
|
|
|
|
|
|
|
для: 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 // Переписываем каталог на новую позицию
|
Оптимален ли такой код? А то запросов к базе многова-то получается (хотя с перестановкой мест получится столько же) | |
|
|
|