#mysql #rows
#mysql #строки
Вопрос:
У меня есть список элементов в таблице MySQL. Пользователь может упорядочивать эти элементы, перетаскивая их вверх и вниз в HTML-списке. Затем мне нужно сохранить позицию каждого элемента в списке.
Возможно ли это сделать в одном вызове MySQL или это должен быть отдельный вызов для каждого продукта, чтобы задать свой собственный идентификатор заказа?
Один вызов будет выглядеть примерно так:
UPDATE table_name SET `order` = order_number AND `product_id` = 'X';
Комментарии:
1. Итак, в чем именно заключается вопрос. Если бы вы хотели обновить много уникальных строк, вам пришлось бы изменить предложение WHERE no? Так что же делает ее уникальной?
2. Каждая строка в таблице представляет собой уникальный продукт с уникальным идентификатором … каждый атрибут заказа продукта также уникален — то есть никакие два продукта не могут иметь одинаковый
order
номер.
Ответ №1:
Ну, вы могли бы удалить всю таблицу, а затем вставить новые номера заказов для всех продуктов. Это всего лишь два оператора. Это будет работать до тех пор, пока эта таблица содержит только информацию «порядок» и никаких других важных данных.
Комментарии:
1. Я знаю об этом методе… но мне было интересно, могли ли быть какие-либо лучшие решения, которые не предполагают удаления данных, особенно для сценариев, где данные не могут быть удалены из-за ограничений внешнего ключа, и в этом случае, я думаю, решением было бы создать другую таблицу, содержащую только идентификаторы продуктов и их порядковый номер.
2. Я создал отдельную таблицу, которая содержит только идентификатор продукта и отображаемый номер заказа. Затем я очищаю таблицу и повторно заполняю, как вы предложили.
Ответ №2:
Вы могли бы удалить все рассматриваемые элементы и вставить их обратно, если это не повлияет на другие данные (КАСКАД и подобные). Это было бы два запроса; УДАЛИТЬ с помощью «WHERE product_id IN (‘X’, ‘Y’, …)» и ВСТАВИТЬ с обновленными значениями для каждого элемента.
Чистым решением было бы выполнить ОБНОВЛЕНИЕ в транзакции, но поскольку MySQL не поддерживает проверку отложенных ограничений, у вас возникнет проблема, если атрибут ‘order’ УНИКАЛЕН.