|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.03.2009, 17:39 | #1 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
Перемещение элементов списка выше/ниже
В БД в таблице одно из полей - showorder типа int влияющее на порядок сортировки элемента в списке. Т.е. в таблице несколько записей и у каждой установлено поле showorder в какое-то значение. Далее при выборе элементов из базы используется select .... order by showorder.
Как сделать функции для перемещения конкретного элемента выше или ниже? Т.е. нужно будет изменять showorder. showorder в нескольких элементах может принимать одинаковые значения, так как при добавлении нового элемента ему автоматом присваивается 0. showorder.png Таблица - fields(id, name, showorder) В общем в некоторых CMS есть возможность сортировать элементы(категории например). Мне нужно тоже самое по функциональности, но в цмсках у них свои фреймворки, ничего не разобрать. Последний раз редактировалось iankov; 09.03.2009 в 18:19. |
09.03.2009, 18:01 | #2 |
Старожил
Регистрация: 09.09.2008
Сообщений: 2,624
|
Переместить где? (ВЗРЫВ МОЗГА!)
Стрелок-охотник
|
09.03.2009, 18:12 | #3 |
Участник клуба
Регистрация: 04.10.2008
Сообщений: 1,485
|
лучше оставить такое поле обычным полем ввода (type="text") и выставлять значения вручную, с шагом например в сотню, чтобы можно было вставлять новые элементы между других
для понимания вышенаписанного советую переосмыслить название поля как "приоритет" функция же могла бы выглядеть вроде update table set showorder=showorder+1 where showorder>$item_showorder свободен... Последний раз редактировалось wall66; 09.03.2009 в 18:19. |
09.03.2009, 18:22 | #4 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
mv28jam
Подправил сообщение, добавил рисунок - думаю там все понятно. Кнопками вверх/вниз мы перемещаем элементы относительно друг друга. |
09.03.2009, 19:40 | #5 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
Сделал исходя из того что одинаковых showorder у меня не будет. Буду при добавлении новой записи автоматически ей присваивать showorder = максимальный текущий showorder + 1. Т.е. последний элемент будет в конце списка.
Данный код подымает требуемый элемент вверх по списку PHP код:
Последний раз редактировалось iankov; 09.03.2009 в 19:43. |
09.03.2009, 19:45 | #6 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,177
|
делал нечто подобное...
но! ваше высказывание, что могут быть одинаковые значения поля showorder - вообще убивают смысл сортировки.... как при одинаковых значениях определить кто выше/ниже? Если гарантировать что поле уникальное - то нужно производить некий "обмен" ..... я делал это следующим способом: для заданного элемента - находим первый следующий, showorder которого выше нашего.... и меняем значения нашего элемента и найденного.... все чиста запросами здесь наверное не обойтись... Код:
Последний раз редактировалось ADSoft; 09.03.2009 в 19:47. |
09.03.2009, 20:32 | #8 | |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
Цитата:
Если вы про этот кусок PHP код:
|
|
09.03.2009, 21:08 | #9 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,177
|
да, что- то невнимательно посмотрел... нужна сортировка
а насчет одинаковых - тогда order by showorder, id |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Pascal] найти сумму элементов лежащих ниже побочной диагонали | Рамик | Помощь студентам | 12 | 28.03.2011 22:53 |
в сглаженой матрице найти сумму модулей элементов расположенных ниже главной диагонали | Sergeo_89 | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 07.12.2010 00:02 |
Вычислить сумму элементов матрицы, расположенные на главной диагонали и выше нее | MariyaVo | Паскаль, Turbo Pascal, PascalABC.NET | 9 | 10.05.2009 21:19 |
произведение всех элементов, расположенных на главной диагонали и выше ее матрицы размером 4х4, Pascal | __FIRST__ | Помощь студентам | 2 | 12.12.2008 02:43 |
Перемещение и замена данных на один ряд выше | Khabibula | Microsoft Office Access | 1 | 13.08.2008 12:57 |