Каков наилучший способ изменить порядок 1000 строк за один снимок? - PullRequest
2 голосов
/ 30 июля 2010

У меня есть 1000 записей в таблице, которая содержит поле позиции, начиная с 1 до 1000. Теперь я хочу реализовать функцию переупорядочения для 1000 записей.Предположим, если я переместлю 1000-ю запись в 1-ю позицию, то 1-я запись должна переместиться во 2-ю позицию, 2-я запись переместится в 3-ю позицию и 999-я запись переместится в 1000-ю позицию.

ПРИМЕЧАНИЕ: Я показываю 20 записей на странице.

Я реализовал функцию переупорядочения, используя плагин jqGrid drag and drop.Используя эту технику, очень просто обновить 20 позиций записи одновременно.На стороне MySQL, я буду запускать 20 запросов на обновление для обновления позиции 20 записей.

Теперь я хочу иметь текстовое поле в столбце позиции, в котором содержится текущая позиция записи.Таким образом, пользователь может переместить любую запись в любую позицию, введя номер позиции в текстовом поле независимо от перетаскивания.Предположим, я на 50-й странице и хочу переместить 1000-ю запись в 1-ю позицию. Я введу номер позиции в текстовое поле 1000-й позиции как 1. Как только я введу номер позиции, логика переупорядочения должна произойти, как я сказалв первом абзаце.

Теперь, кто-нибудь, пожалуйста, скажите мне, как я могу обновить 1000 записей одновременно?и какой будет нагрузка на MySQL?Каков наилучший способ достижения этой функциональности?

ПРИМЕЧАНИЕ: Я не хочу запускать 1000 запросов на обновление (т. Е. Чтобы избежать состояния взаимоблокировки MySQL), как я делал в режиме перетаскиванияфункциональность.

Спасибо всем, кто заранее помог.

1 Ответ

3 голосов
/ 30 июля 2010

Сотни обновлений - это просто смешно. Попробуйте что-то вроде этого:

UPDATE Records SET
SequenceNumber = SequenceNumber + 1
WHERE SequenceNumber >= @Lowbound AND SequenceNumber <= @UpperBound;

UPDATE Records SET
SequenceNumber = @Lowbound
WHERE ID = @SelectedId;
...