Изменить порядок строк в таблице MySQL - PullRequest
2 голосов
/ 04 октября 2011

У меня есть таблица:

+--------+-------------------+-----------+
| ID     | Name              |  Order    |
+--------+-------------------+-----------+
| 1      | John              | 1         |
| 2      | Mike              | 3         |
| 3      | Daniel            | 4         |
| 4      | Lisa              | 2         |
| 5      | Joe               | 5         |
+--------+-------------------+-----------+

Порядок может быть изменен администратором, следовательно, столбец заказа.На стороне администратора у меня есть форма с полем выбора Insert After: для записи в базу данных.Какой запрос я должен использовать для порядка + 1 после вставленного столбца.

Я хочу сделать это таким образом, чтобы свести нагрузку на сервер к минимуму, поскольку в этой таблице в настоящее время 1200 строк.Это правильный способ сохранить порядок таблицы или есть лучший способ?

Любая помощь приветствуется

РЕДАКТИРОВАТЬ:

Вот чтоЯ хочу сделать, благодаря егоmatt:

хотите изменить порядок строки номер 1, чтобы быть после строки 1100, вы планируете оставить 2-1100 то же самое, а затем изменить 1, чтобы быть 1101 и с шагом 1101-1200

Ответы [ 3 ]

6 голосов
/ 04 октября 2011

Это нужно сделать в два этапа:

UPDATE MyTable 
   SET `Order` = `Order` + 1 
 WHERE `Order` > (SELECT `Order` 
                    FROM MyTable 
                   WHERE ID = <insert-after-id>);

... который сместит порядковый номер каждой строки дальше вниз по списку, чем человек, после которого вы вставляете.

Тогда:

INSERT INTO MyTable (Name, `Order`)
VALUES (Name, (SELECT `Order` + 1 FROM MyTable WHERE ID = <insert-after-id>));

Чтобы вставить новую строку (при условии, что ID - это автоинкремент), с номером заказа на единицу больше, чем человек, которого вы вставляете после.

1 голос
/ 04 октября 2011

Просто добавьте новую строку любым обычным способом и позвольте последующему SELECT использовать ORDER BY для сортировки. 1200 строк бесконечно мало по стандартам MySQL. Вы действительно не должны (и не хотите) хранить физическую таблицу отсортированной. Вместо этого используйте ключи и индексы для доступа к таблице таким способом, который даст вам то, что вы хотите.

0 голосов
/ 04 октября 2011

вы можете

insert into tablename (name, `order`) 
values( 'name', select `order`+1 from tablename where name='name')

вы также можете id = id_val в своем внутреннем выборе.

Надеюсь, это то, что вы ищете, вопрос не совсем ясен.

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