В одном из моих текущих проектов у меня есть элемент формы выпадающего списка (select). Я заполняю параметры с помощью массива (PHP):
$regions=array(
1=>'North West',
2=>'North East',
3=>'South West',
4=>'South East',
);
(массив key = значение параметра, значение массива = текст опции)
Теперь это дает мне возможность переустановки параметров по своему усмотрению.
Проблема заключается в том, что мой клиент хочет иметь возможность добавлять/изменять/переупорядочивать параметры из интерфейса администратора. Это означает, что теперь мне нужно включить эти параметры в таблицу базы данных.
То, что это также означает, заключается в том, что нет простого способа (а не того, что я знаю) помещать записи в пользовательский порядок.
Предположим, что я создаю таблицу регионов, которая включает поле sort_order. Кто-нибудь знает какие-либо решения, которые позволят клиенту переупорядочить записи из интерфейса с помощью простых кнопок вверх/вниз?
Единственный способ представления упорядочения в реляционной базе данных - это указать поле, которое определяет порядок, как вы сказали в поле sort_order
.
В вашем интерфейсе администратора вы можете заставить кнопки вверх/вниз запускать функцию JavaScript (предполагая веб-приложение), которая будет проходить через вновь упорядоченные регионы и назначать инкрементное целое каждому. Это целое число может быть присвоено скрытому полю для каждого региона и отправлено с данными полной формы при сохранении изменений.
После публикации формы вы можете просто вставить/обновить записи в базе данных с полем sort_order
, поскольку оно было рассчитано на стороне клиента.
Получение упорядоченного набора результатов из базы данных обычно довольно просто:
SELECT * FROM your_table ORDER BY sort_order;
Вам необходимо сохранить этот заказ в таблице вместе с указанным пользователем порядком сортировки.
create table regions {
id int primary key,
name varchar(255) not null,
sortorder int not null
};
Чтобы получить значения в порядке сортировки, выполните select id,name from regions order by sortorder
Если вы хотите, чтобы отображаемый заказ находился на северо-востоке, юго-востоке, северо-западе, юго-западе, ваш стол будет содержать:
id name sortorder
1 North West 3
2 North East 1
3 South West 4
4 South East 2
Ваш графический интерфейс просто обновляет столбец сортировки на основе порядка, который пользователь упорядочивает.
Извините - нет.
Вы правильно используете столбец sort_order
...
Некоторые могут предлагать использовать интервалы, такие как 10 - IE: 10, 20, 30... поэтому вы можете вставлять их между ними. Но в какой-то момент схема должна быть правильно перегруппирована...
Подходом "выжженной земли" является удаление существующих строк и назначение порядка сортировки на основе порядка в пользовательском интерфейсе для вновь вставленных строк.
Только с четырьмя вариантами я бы использовал поле списка HTML, чтобы показать четыре элемента, а также кнопку вверх/вниз, которая позволяет их переупорядочивать. Пример этого можно найти здесь.
Когда элементы переупорядочиваются, обновите значение скрытого поля, чтобы сохранить текущий порядок.
Когда форма отправляется на сервер, проанализируйте значение скрытого поля и обновите столбец sort_order
для каждого элемента.