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

Форум PHP

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

 

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

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

тема: сортировка
 
 автор: vale1487   (29.06.2010 в 20:32)   письмо автору
 
 

Кто сталкивался с такой задачей.

Имеем меню например

меню 1
меню 2
меню 3
меню 4

Рядом с каждым разделом меню input text для ввода позиции.
Как реализовать если в середине я поставлю позициюю для меню 2, что бы остальные соотвественно передвинулсь на еденичку

  Ответить  
 
 автор: deadmanr   (29.06.2010 в 20:37)   письмо автору
 
   для: vale1487   (29.06.2010 в 20:32)
 

непонял вопрос

  Ответить  
 
 автор: vale1487   (29.06.2010 в 20:48)   письмо автору
37.8 Кб
 
   для: deadmanr   (29.06.2010 в 20:37)
 

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

В джумла, например меню так же сортируется , нажимаешь кнопку и оно либо поднимается на одну позицию,если нужно опускается

  Ответить  
 
 автор: sim5   (30.06.2010 в 09:29)   письмо автору
 
   для: vale1487   (29.06.2010 в 20:32)
 

Что означает "в середине я поставлю позицию для меню 2"?
У меню 2 нет середины. Если речь о "перед ним новый элемент", который получит позицию 2, а остальные надо сместить, это одно. А если изменить позицию элемента 2, то это уже иное.

  Ответить  
 
 автор: vale1487   (30.06.2010 в 11:51)   письмо автору
 
   для: sim5   (30.06.2010 в 09:29)
 

например есть 3 элемент с индексом позиционировния


элемент позиция 1
элемент позиция 2
элемент позиция 3

если я меняю позицию у элемента 2 на 3, как должна происходить смена позиции у других элементов , если они должны сместиться на одну.

  Ответить  
 
 автор: Trianon   (30.06.2010 в 12:07)   письмо автору
 
   для: vale1487   (30.06.2010 в 11:51)
 

>например есть 3 элемент с индексом позиционировния
>
>
>элемент позиция 1
>элемент позиция 2
>элемент позиция 3
>
>если я меняю позицию у элемента 2 на 3, как должна происходить смена позиции у других элементов , если они должны сместиться на одну.

Если Вы меняете позицию у элемента 2 на 3, то должны также поменять пред этим позицию у элемента 3 на 4, а пред тем - у 4 на 5 и т.д.

  Ответить  
 
 автор: Лена   (30.06.2010 в 12:29)   письмо автору
 
   для: Trianon   (30.06.2010 в 12:07)
 

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

  Ответить  
 
 автор: Trianon   (30.06.2010 в 13:53)   письмо автору
 
   для: Лена   (30.06.2010 в 12:29)
 

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

  Ответить  
 
 автор: sim5   (30.06.2010 в 12:13)   письмо автору
 
   для: vale1487   (30.06.2010 в 11:51)
 

Вы сами понимаете то, что пишите - например есть 3 элемент....?
Есть 3 элемента! А то понапишите, и потом не понять, чего вам надо.

Изменить позицию не сложно, вопрос в том, что делать при этом с освободившейся позицией, то есть:
позиция 1
позиция 2
позиция 3
позиция 4
......
меняем поцизую 2 на 3, получаем:
позиция 1
позиция 3 //бывшая 2
позиция 4 //бывшая 3
позиция 5 //бывшая 4
а позиции 2 после этой опрерации не будет.

Вам именно так надо?

  Ответить  
 
 автор: vale1487   (30.06.2010 в 13:31)   письмо автору
 
   для: sim5   (30.06.2010 в 12:13)
 

вроде все верно

  Ответить  
 
 автор: sim5   (30.06.2010 в 13:42)   письмо автору
 
   для: vale1487   (30.06.2010 в 13:31)
 

Ну если так, то проблем нет, делайте запрос:
"UPDATE table SET pos=pos+1 WHERE pos > шаг - 1"
а изменямой позиции
"UPDATE table SET pos=pos+шаг WHERE pos = текушая"
но тогда получатся "дыры" в позициях.

PS. Может быть нужно смещение позиций? То есть, восстановление порядка при смещении. Например:
1 2 3 4 5 6
Если сместить 2 на позицию 3 (то есть 2 станет 3, 4 станет 5, и т.д.), то получим 1 3 4 5 6 7, а потом восстановить порядок (то есть 1 2 3...), то после смещения и получения новых номеров, вычитаем из них единицу и получаем опять 1 2 3 4 5 6.
Из этого следует, что если шаг смещения равен 1, то производить такую земену нет смысла. А вот если 2 переместить на позицию 4 (шаг равен 2, больше 1), то тогда позиции от 4 и выше не изменяются, позиция 3 получает поцию текущую минус 1, а позиция 2 позицию текущую плюс шаг минус 1.

  Ответить  
 
 автор: vale1487   (30.06.2010 в 13:55)   письмо автору
 
   для: sim5   (30.06.2010 в 13:42)
 

да второй вариант тоже интересен, но непрост конечно для понимания

  Ответить  
 
 автор: sim5   (30.06.2010 в 14:08)   письмо автору
 
   для: vale1487   (30.06.2010 в 13:55)
 

А что тут понимать? Пусть надо сдинуть позициую 2 на позицию 6 (то есть поместить после позиции 5) в списке:
1 2 3 4 5 6 7 8 9
Получаем шаг изменения:
S = 5 - 2;
Новый номер позииции 2:
N = 2 + S
Изменяем номера позиций у позиций больше 2 и меньше или равно N, вычитая из их текущих позиций 1.
Позиции 2 устанавливаем позицию равную N.

При обратном смещении (снизу вверх), наборот - изменяются нежестоящие позиции.

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

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