Обновление порядка отображения нескольких строк MySQL в одном или нескольких запросах - PullRequest
16 голосов
/ 14 апреля 2009

У меня есть таблица с 20 строками, каждая с номером для порядка отображения (1-20).

SELECT * FROM `mytable` ORDER BY `display_order` DESC;

Из административной области вы можете перетаскивать строки или вводить новое число вручную для каждой строки.

Конечно, не следует зацикливаться на запросе ОБНОВЛЕНИЯ для каждой строки, что является альтернативой в одном или нескольких запросах, подходящих для обновления одной ячейки в 20 или более строк, 50-200+?


Редактировать: Много хороших отзывов и идей. Я мог бы расширить идеи, которые я рассматривал до сих пор:

Одна строка массива : Я мог бы иметь порядок в строке, содержащей уникальные идентификаторы строк в нужном мне порядке - например, строки 1,9,2,6,23. Когда заказ обновляется, скрытое поле обновляется с помощью JavaScript и добавляет его в базу данных или текстовый файл по завершении:

UPDATE `my_dispaly_order_table` SET `display_order`='1,9,2,6,23';

Обновлять каждую строку по отдельности : это то, чего я пытался избежать, но это можно было изменить очень редко, поэтому 20-30 вызовов в одном обращении один раз в неделю или месяц не могли бы быть проблемой, так просто я обычно делаю вызов UPDATE для каждой строки:

UPDATE `mytable` SET `display_order`='1' WHERE `rowId` = 1;
UPDATE `mytable` SET `display_order`='2' WHERE `rowId` = 9;
UPDATE `mytable` SET `display_order`='3' WHERE `rowId` = 2;
UPDATE `mytable` SET `display_order`='4' WHERE `rowId` = 6;
UPDATE `mytable` SET `display_order`='5' WHERE `rowId` = 23;

Ответы [ 11 ]

0 голосов
/ 14 апреля 2009

Вы можете создать временную таблицу и заполнить первичным ключом строк, которые вы хотите изменить, и новыми значениями display_order для этих строк, а затем использовать версию UPDATE для нескольких таблиц для обновления таблицы за один раз. Однако я не думаю, что это быстрее, не без тестирования обоих подходов.

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