Обновление mysql-таблицы.одно поле = старое_значение - 1 - PullRequest
3 голосов
/ 03 апреля 2011

Что мне нужно сделать, это: - Удалить одну запись из таблицы formfields - Обновить КАЖДОЕ поле с упорядочением> (упорядочение удаленного поля) - Установите порядок обновленных полей на текущее значение минус 1 (например, если текущий порядок полей равен 8, то его следует установить равным 7).

Возможно ли это в одном запросе? Или как я могу это сделать?

Ответы [ 2 ]

8 голосов
/ 03 апреля 2011

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

С учетом следующей таблицы:

CREATE TABLE `formfields` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `order_no` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

Вы можете сделать что-то вроде следующего:

START TRANSACTION;
DELETE FROM formfields WHERE order_no = {YOUR_NUM};
UPDATE formfields SET order_no = order_no - 1 WHERE order_no > {YOUR_NUM};
COMMIT;
3 голосов
/ 03 апреля 2011

Вы, очевидно, не можете использовать DELETE и UPDATE в одном запросе, но вы можете использовать InnoDB, запустить транзакцию, выполнить запрос на удаление, а затем использовать запрос на обновление, такой как ...

UPDATE formfields SET field_value = field_value - 1 
WHERE field_value >= <VALUE YOU'VE JUST DELETED>

... до совершения транзакции.

Выполнение двух запросов вплотную с использованием таблицы MyISAM сработает девять раз из десяти (в зависимости от нагрузки и т. Д.), Но вам действительно не следует туда идти.

...