Вопрос

У меня есть стол на моем сайте, где у пользователя есть возможность переуправлять строки. Эта часть легко связана с jQuery ui, и получение нового порядка простой, используя $('#sortable').sortable("serialize") метод. Мой вопрос сейчас, какой самый эффективный способ сохранить все эти записи в базе данных, поскольку изменение порядка одного элемента меняет все записи в таблице? Я знаю, что могу создать новый UPDATE Заявление для каждой строки на основе их идентификатора, но я чувствую, что должен быть лучший способ. Есть?

Я использую mysql и asp.net.

Это было полезно?

Решение

Использовать START TRANSACTION команда. Это намного быстрее.

Другие советы

Учитывая, что есть потенциально произвольно большое количество строк, я бы хранил заказ как запись текстового строки в таблице пользовательских настроек (при условии, что у вас такая таблица). По сути, по умолчанию будет нулевая запись (для экономии на диске (для экономии на диске), что будет означать, что упорядочение не изменино от заказа в базе данных, и если пользователь меняет его, вы можете просто сериализировать порядок строк (т. Е. Если бы у них был ряд 15 первым, то 19, то 3, вы могли бы иметь 15-19-3) А потом просто прочитайте это. Это одно обновление и масштабируется на неопределенный срок (ну, до длины текстовой строки, но это Довольно собачья большая для mediumtext и longtext Типы).


Я ухожу из вышесказанного на всякий случай, если это применимо к другим людям, но для конкретного случая, описанного ниже, я думаю, что я бы рассмотрел хранение префодаций в текстовомфилам. Учитывая, что упорядочение в любом случае отображается пользователю, нет риска безопасности в предварительных условиях, находящихся в файле открытого текста, и вы можете переписать все это очень быстро. Учитывая, как вы описали его ниже, я бы использовал файл CSV двух столбцов, но, очевидно, вы можете настроить его, однако, имеет самый смысл.

Быстрый поиск по скоростям чтения файлов привел к Этот комментарий на file_get_contents() Функция, которая предлагает вам, возможно, захочет обратить внимание на то, насколько большой файл будет при рассмотрении метода, который вы будете использовать для доступа к данным в файле. Я не знаю о писать.

Ваш вопрос не хватает некоторой ясности, по крайней мере, для меня. Я представляю, что вы показываете пару записей, к которым я ссылаюсь на ID ~ Rank. Например:

5~1
6~2
7~3
1~4
24~5
2~6

Теперь вы говорите, что изменение того, что «Заказ одного элемента меняет все записи в таблице». Это действительно необходимо в вашем дизайне? Если пользователь переключает элементы с ID-S 1 и 24, у вас будет следующий сериализованный список:

[5~1],[6~2],[7~3],[24~5],[1~4],[2~6]

Теперь, подтверждая этот список, вы можете легко определить, какие строки должны быть действительно обновлены (это не соответствует естественному порядку звания).

В моем примере вы должны сделать два запроса обновлений вместо шести:

update XYZ set rank=4 where id = 24;
update XYZ set rank=5 where id = 1;

Ваше здоровье!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top