Выберите столбец, в котором значение равно нулю или нулю - PullRequest
1 голос
/ 14 марта 2019

У меня есть таблица , и я хочу увеличить значение ячейки столбца на единицу, где значение равно нулю или от 0 до 5. Когда значение в ячейке равно 6, я хочу ввести значение на один следующий столбец. И повтори. Когда значение каждого столбца в строке равно 6, мне нужно перейти к следующей строке и выполнить те же действия. Например: я обновляю столбец 01 в первой строке, добавляю 1. Следующий запрос, добавляю 1, .. Когда значение равно 6, мне нужно сделать то же самое со столбцом 02 ... Как лучше всего? Спасибо

Эта база данных является базой данных хранилища, каждое значение ячейки показывает, сколько ящиков находится в этой позиции

до

после

CREATE TABLE `ciselnik_sklad_regal_pozice` (
 `REGAL` int(10) unsigned NOT NULL,
 `POLICE` varchar(1) NOT NULL,
 `POZICE` varchar(5) NOT NULL,
 `01` varchar(45) DEFAULT NULL,
 `02` varchar(45) DEFAULT NULL,
 `03` varchar(45) DEFAULT NULL,
 `04` varchar(45) DEFAULT NULL,
 `05` varchar(45) DEFAULT NULL,
 `06` varchar(45) DEFAULT NULL,
 `07` varchar(45) DEFAULT NULL,
 `08` varchar(45) DEFAULT NULL,
 `09` varchar(45) DEFAULT NULL,
 `10` varchar(45) DEFAULT NULL,
 `11` varchar(45) DEFAULT NULL,
 `12` varchar(45) DEFAULT NULL,
 `13` varchar(45) DEFAULT NULL,
 `14` varchar(45) DEFAULT NULL,
 `15` varchar(45) DEFAULT NULL,
 `16` varchar(45) DEFAULT NULL,
 `17` varchar(45) DEFAULT NULL,
 `18` varchar(45) DEFAULT NULL,
 `19` varchar(45) DEFAULT NULL,
 `20` varchar(45) DEFAULT NULL,
 `21` varchar(45) DEFAULT NULL,
 `22` varchar(45) DEFAULT NULL,
 `23` varchar(45) DEFAULT NULL,
 `24` varchar(45) DEFAULT NULL,
 `25` varchar(45) DEFAULT NULL,
 `26` varchar(45) DEFAULT NULL,
 `27` varchar(45) DEFAULT NULL,
 `28` varchar(45) DEFAULT NULL,
 `29` varchar(45) DEFAULT NULL,
 `30` varchar(45) DEFAULT NULL,
 `31` varchar(45) DEFAULT NULL,
 `32` varchar(45) DEFAULT NULL,
 `33` varchar(45) DEFAULT NULL,
 `34` varchar(45) DEFAULT NULL,
 `35` varchar(45) DEFAULT NULL,
 `36` varchar(45) DEFAULT NULL,
 `37` varchar(45) DEFAULT NULL,
 `38` varchar(45) DEFAULT NULL,
 `39` varchar(45) DEFAULT NULL,
 `40` varchar(45) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Вы можете попробовать это.

UPDATE TestTable SET 
`01` = CASE WHEN `01` < 6 THEN `01`+1 ELSE `01` END,
`02` = CASE WHEN `01` = 6 AND `02` < 6 THEN `02`+1 ELSE `02` END,
`03` = CASE WHEN `02` = 6 AND `03` < 6 THEN `03`+1 ELSE `03` END,
`04` = CASE WHEN `03` = 6 AND `04` < 6 THEN `04`+1 ELSE `04` END,
`05` = CASE WHEN `04` = 6 AND `05` < 6 THEN `05`+1 ELSE `05` END,
`06` = CASE WHEN `05` = 6 AND `06` < 6 THEN `06`+1 ELSE `06` END,
`07` = CASE WHEN `06` = 6 AND `07` < 6 THEN `07`+1 ELSE `07` END;
0 голосов
/ 14 марта 2019

Вы должны быть в состоянии сделать это с помощью одного запроса. При необходимости добавьте предложение where.

UPDATE `table`
SET `01` = if(`01` >= 6,6,`01`+1),
    `02` = if(`02` >= 6,6,if(`01` = 6 AND COALESCE(`01`,0) => 0,`02`+1,`02`)),
    `03` = if(`03` >= 6,6,if(`02` = 6 AND COALESCE(`02`,0) => 0,`03`+1,`03`)),
    etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...