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

#mysql #sql #database

#mysql #sql #База данных

Вопрос:

У меня есть эта таблица, и я хочу увеличить значение ячейки столбца на единицу, где значение равно нулю или от 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
  

Комментарии:

1. Покажите пару строк и ожидаемый результат. Будет достаточно нескольких столбцов (нет необходимости показывать их все).

2. У меня нет кода для этого.

3. Я имел в виду пару строк данных, до и после изменения, которое вы хотите.

4. Извините. Есть изображения до и после 22 запросов, которые увеличивают значение в ячейке на единицу.

5. К вашему СВЕДЕНИЮ , вместо изображений, пожалуйста, вставьте текст и отметьте как код. Мы не можем скопировать / вставить из изображения при попытке дублирования или устранения неполадок. Спасибо

Ответ №1:

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

 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;
  

Ответ №2:

Вы должны быть в состоянии выполнить это с помощью одного запроса. При необходимости добавьте предложение 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...
  

Комментарии:

1. Я не уверен, но, похоже, OP хочет обновить следующий столбец, основываясь не на исходном значении этого столбца, а на результирующем. Обычно это невозможно. Возможно, я ошибаюсь.

2. Если значение предыдущего столбца равно шести, мне нужно увеличить следующий столбец на единицу, иначе увеличить предыдущий столбец на единицу.

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