Я занимаюсь разработкой веб-приложения, в котором изображения будут отображаться в слайдере. Важно, чтобы я мог изменять порядок, в котором они отображаются.
В настоящее время у меня есть столбец в таблице изображений, называемый «порядок», который должен быть установлен для обеспечения правильного порядка упорядочения, но изменение его требует также изменения любого другого, что становится сложным при работе с сотнями записей.
Эта таблица, а также запросы на ее изменение находятся в стадии разработки, поэтому вполне можно изменить способ, которым я это делаю.
Мои вопросы:
Когда я вставляю новую строку, как я могу убедиться, что она появляется в конце списка? Автоинкремент в SQL имеет тенденцию оставлять пропуски, если вы удаляете записи из таблицы. Как мне убедиться, что строке назначен порядок на 1 больше, чем самый высокий порядок в таблице?
Как мне изменить порядок столов? Представьте, что я использую интерфейс перетаскивания (или аналогичный), чтобы изменить порядок одного изображения, перенести его в верхнюю часть или другую часть списка. Если я сделаю это, мне нужно сбросить нумерацию каждого элемента, что опять-таки неэффективно при работе с сотнями строк.
Как не допустить, чтобы две строки имели одинаковый порядок в любой момент времени? УНИКАЛЬНЫЙ флаг на столбце? Предположительно, если я установлю этот флаг, изменение порядка, скажем, 8 в одном ряду откроет другой, чтобы использовать этот номер. Правильно?
Спасибо за ваше время, и я надеюсь, что это не слишком расплывчатый вопрос, на который легко ответить!
Это будет в конце списка. Просто используйте auto increment
особенность и не устанавливайте ID вручную (например, lastID + 1
) и вы никогда не описали проблему.
Вы можете позволить пользователю изменить порядок списка, а затем просто обновить все order
ячейки (для каждого члена списка). Или вы можете использовать Ajax и обменять order
значение для двух членов каждый раз, когда пользователь перетаскивает.
Используйте один из подходов, описанных в 2, и у вас никогда не возникнет этой проблемы.
Запросите таблицу, в которую вы собираетесь вставить, чтобы найти MAX ID в таблице. Тогда на вашей вставке просто сделайте это +1.
При повторном заказе, скажем, вы хотите установить порядок изображений 6 в порядок 3. Вы хотите обновить все строки от порядка 3 и далее до порядка + 1, а затем установить изображение на порядок 3.
UPDATE table SET id = id+1 WHERE id IN (SELECT * FROM table where id >= 3)
Примечание
Вы можете при удалении картинки переоценить идентификаторы, чтобы не было пробелов
UPDATE table SET id = id-1 WHERE id IN (SELECT * from TABLE WHERE id > 3)
Где 3 — удаленный идентификатор