Обновите поле MySql (если поле не пустое, перейдите к следующему)

Здравствуйте, у меня есть таблица с 10 столбцами (columnA, ColumnB, ColumnC …), ColumnA для ID.

Я хочу сделать обновление в php следующим образом: IF ColumnB не пуст, а затем обновляет ColumnC, если ColumnC не пуст, обновите ColumnD … пока не найдет пустой столбец.

Я знаю, как обновить пустой столбец, но я не могу определить, как реализовать оператор IF.

До сих пор у меня это:

mysql_query("UPDATE tabel_name SET ColumnB = 'example' WHERE ColumnA = '$ID' "); 

Спасибо

Вы должны использовать case для обновления только выборочных столбцов.

Пример :

 update table_name set col1 = ( case when col1 is null then ? else col1 end ) , col2 = ( case when col2 is null then ? else col2 end ) -- , col3 = ... ; 

Используйте mysql для замены параметров запроса.

Также см . Ответ Quassnoi на аналогичную публикацию .

Обновление :

IF ColumnB не пуст, а затем обновляет ColumnC, если ColumnC не пуст, обновите ColumnD … пока не найдет пустой столбец .

Вам нужно установить проверку значений столбцов в обратном порядке.

 update table_name set -- more next ( 4 to n ) columns here if required col3 = ( case when ( col2 is not null and col3 is null ) then 7 else col3 end ) , col2 = ( case when ( col1 is not null and col2 is null ) then 8 else col2 end ) , col1 = ( case when ( col1 is null ) then 9 else col1 end ) ; 

Пример таблицы :

 mysql> create table col_values ( id INT, col1 INT, col2 INT, col3 INT ); Query OK, 0 rows affected (0.06 sec) mysql> insert into col_values values ( 1, 1, 1, NULL ), ( 2, 1, NULL, NULL ), ( 3, NULL, NULL, NULL ); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from col_values; +------+------+------+------+ | id | col1 | col2 | col3 | +------+------+------+------+ | 1 | 1 | 1 | NULL | | 2 | 1 | NULL | NULL | | 3 | NULL | NULL | NULL | +------+------+------+------+ 3 rows in set (0.00 sec) mysql> update col_values set -> col3 = ( case when ( col2 is not NULL and col3 is NULL ) then 7 else col3 end ) -> , col2 = ( case when ( col1 is not NULL and col2 is NULL ) then 8 else col2 end ) -> , col1 = ( case when ( col1 is NULL ) then 9 else col1 end ) -> ; Query OK, 3 rows affected (0.02 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> select * from col_values; +------+------+------+------+ | id | col1 | col2 | col3 | +------+------+------+------+ | 1 | 1 | 1 | 7 | | 2 | 1 | 8 | NULL | | 3 | 9 | NULL | NULL | +------+------+------+------+ 3 rows in set (0.00 sec) 

Вы также можете использовать, if функция является альтернативой case .

 mysql> truncate table col_values; Query OK, 3 rows affected (0.01 sec) mysql> insert into col_values values ( 1, 1, 1, NULL ), ( 2, 1, NULL, NULL ), ( 3, NULL, NULL, NULL ); Query OK, 3 rows affected (0.02 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from col_values; +------+------+------+------+ | id | col1 | col2 | col3 | +------+------+------+------+ | 1 | 1 | 1 | NULL | | 2 | 1 | NULL | NULL | | 3 | NULL | NULL | NULL | +------+------+------+------+ 3 rows in set (0.00 sec) mysql> update col_values set -> col3 = if( ( col2 is not NULL and col3 is NULL ), 7, col3 ) -> , col2 = if( ( col1 is not NULL and col2 is NULL ), 8, col2 ) -> , col1 = if( col1 is NULL, 9, col1 ) -> ; Query OK, 3 rows affected (0.01 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql> select * from col_values; +------+------+------+------+ | id | col1 | col2 | col3 | +------+------+------+------+ | 1 | 1 | 1 | 7 | | 2 | 1 | 8 | NULL | | 3 | 9 | NULL | NULL | +------+------+------+------+ 3 rows in set (0.00 sec) 

Вы могли бы сделать что-то вроде

 UPDATE table SET columnC = IF(columnB is not null, "value", columnC) where id = 1 

Вы можете попробовать что-то вроде этого:

  $result=mysql_query('SELECT fav1, fav2, fav3, fav4, fav5 FROM users where id=".."'); $row = mysql_fetch_array($result); foreach ($row as $columnName=>$value) { if ($value==null) { //update users set $columnName=pageID break; } }