Как обработать «порядок» списка элементов в БД (php) - PullRequest
3 голосов
/ 18 ноября 2009

Я бы хотел, чтобы мой клиент мог заказывать товары в бэкэнде. Я подумал, что самый простой способ сделать это состоит в том, чтобы таблица базы данных для элемента имела поле под названием «порядок», которое получает значение. Это значение, которое вводит клиент. Тогда я могу просто выполнить упорядочивание SQL-запросов по полю "order".

Прямо сейчас у меня все очень просто ... логики нет .. так что пользователь поместил бы order = 100 для одного элемента и order = 200 для другого ... и тот, у которого было меньшее значение, был бы перечислен первым. Есть ли более элегантный способ сделать это? Я думаю о чем-то вроде «двигаться вверх» и «двигаться вниз». и т.д. Я пытаюсь сделать администрирование элементов более удобным.

Любые идеи будут с благодарностью!

Ответы [ 3 ]

1 голос
/ 18 ноября 2009

Ваш подход очень хорош для того, что вы пытаетесь сделать. Что касается клиентского интерфейса, я бы предложил использовать библиотеку jQuery UI Sortable . Что приятно в сортируемом интерфейсе, так это то, что он может быть легко связан с вашим кодом хранения через AJAX, как показано ниже: http://harm.glucose -ontwerp.nl / dev / sortlist.php . Данные, отправленные через AJAX, представляют собой список идентификаторов и порядок их следования.

0 голосов
/ 19 ноября 2009

Что касается базы данных, ваше решение с использованием поля заказа является правильным. Вы, вероятно, не хотите показывать это пользователю, и, используя пару стрелок вверх и вниз, ввод текста можно обойти. Когда пользователь нажимает стрелку «вверх», вы в основном переключаете конкретную запись с записью над ней. На мета-языке:

// $myId holds id of record, $myOrder holds the order of the record

SELECT id, order FROM t WHERE order < $myOrder LIMIT 1
// Store id in $nextId, order in $nextOrder

UPDATE t SET order = $nextOrder WHERE id = $myId
UPDATE t SET order = $myOrder WHERE id = $nextId

Обратите внимание, что это только очень грубый набросок, вам нужно будет добавить правильный выход. Кроме того, если вы хотите, чтобы индекс UNIQUE использовался для обеспечения строгого упорядочения, вам нужно изменить два последних оператора.

0 голосов
/ 18 ноября 2009

Вы можете предоставить функции пользовательского интерфейса (т. Е. Кнопки и вспомогательный код) для реализации «двигаться вверх» и «двигаться вниз», но в базе данных, чтобы сохранить последовательность пользователя, вы должны хранить ключ сортировки, как у вас есть уже обнаружен. Там нет другого способа сделать это. Если вы хотите, чтобы разные пользователи могли упорядочивать одни и те же строки по-разному, то ключ сортировки должен быть частью отдельной таблицы «сортировки пользователей» со схемой, подобной этой:

itemKey     The primary key of the item table   
userKey     The primary key of the userID table (or maybe just the userID)
sortOrder   The sort key for this combination of user and product

Затем, чтобы определить последовательность сортировки данного пользователя, вы должны присоединить таблицу элементов к таблице userSort where userKey=[the user you're interested in]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...