Обновить 20 строк в MySQL с x = x + 1 значениями? - PullRequest
3 голосов
/ 18 августа 2010

В MySQL у меня есть таблица с примерно 20 строками (пример). Я хочу записать порядок сортировки (в массиве, который содержит picID) в столбец SORT от 1 до x (x - это количество элементов в этом примере x = 20).

Мой массив начинается с: [10,15,1 ...]

Я могу сделать:

UPDATE table SET sort=1 WHERE picID=10
UPDATE table SET sort=2 WHERE picID=15
UPDATE table SET sort=3 WHERE picID=1

...

до 20 ...

Но это делает 20 обновлений для таблицы MySQL ...

Можно ли сделать это более эффективным способом?

Jerry

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Один из способов справиться с этим - использовать временные таблицы:

CREATE TABLE tmp_sort (id INT, sort_order INT);
INSERT INTO tmp_sort VALUES (10, 1), (15, 2), (1,3);

UPDATE table, tmp_sort 
   SET table.sort = tmp_sort.sort_order 
 WHERE tmp_sort.id = table.picID;

Другой способ использовать поток управления:

UPDATE table 
   SET sort = CASE picID
  WHEN 10 THEN 1
  WHEN 15 THEN 2
  WHEN 1  THEN 3
  ELSE sort END

Обратите внимание на ELSE в концеЕсли у вас его нет, все остальное будет пустым!

0 голосов
/ 18 августа 2010

Не совсем, так как вы должны обновить каждую строку, указав picID. Вам нужно будет выполнить 20 команд обновления. Похоже, это наиболее эффективный способ обработки этого случая, если вы не хотите вводить большую команду SQL.

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