Я пытаюсь обновить все позиции, где значение равно 0, поэтому я пытаюсь получить максимальное значение, увеличить его и установить это значение для правильных записей следующим образом:
UPDATE ps_category SET POSITION = ((SELECT POSITION, FROM ps_category ORDER BY POSITION DESC LIMIT 1 ) + 1) WHERE POSITION = 0
Например, если у меня есть 3 записи со значением 0, а максимальное значение в таблице равно 10, я хочу обновить эти записи со следующими значениями: 11,12 и 13.
Первая часть, которую я хотел для достижения было выбрать все записи с помощью POSITION= 0
SELECT * FROM ps_category WHERE POSITION = 0
С другой стороны, я хотел выбрать максимальное значение
SELECT POSITION, FROM ps_category ORDER BY POSITION DESC LIMIT 1
После создания этих двух запросов я сделал их подзапрос, который обновляет желаемые записи, но с этим у меня проблемы, я не могу увеличить максимальное значение за один.
Есть идеи, как это сделать, или полезная документация? Всем спасибо.
Информация, связанная с таблицами
CREATE TABLE `ps_category` (
`id_category` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_parent` INT(10) UNSIGNED NOT NULL,
`id_shop_default` INT(10) UNSIGNED NOT NULL DEFAULT '1',
`level_depth` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
`nleft` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`nright` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`active` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
`date_add` DATETIME NOT NULL,
`date_upd` DATETIME NOT NULL,
`position` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`is_root_category` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_category`) USING BTREE,
INDEX `category_parent` (`id_parent`) USING BTREE,
INDEX `nleftrightactive` (`nleft`, `nright`, `active`) USING BTREE,
INDEX `level_depth` (`level_depth`) USING BTREE,
INDEX `nright` (`nright`) USING BTREE,
INDEX `activenleft` (`active`, `nleft`) USING BTREE,
INDEX `activenright` (`active`, `nright`) USING BTREE)
Структура таблицы с примерами данных
Полезная информация
- Версия: 5.7.31-log
- Engine: InnoDB;
- MySQLController: DbPDO