Как сделать что бы в БД, в каждуый столбец, попал один элемент из массива?

Главные вкладки

Аватар пользователя shlop shlop 15 декабря 2017 в 16:09

Здравствуйте, подскажите пожалуйста, у меня есть таблица в БД, в которую попадают начальный данные, а некоторые столбцы остаются пустые. Потом из неё я эти начальные данные достаю, делаю некоторые расчеты, рассчитанные значения мне нужно записать обратно, в эту же запись в БД, откуда взял начальный данные, в пустые столбцы, то есть сделать update. Проблема состоит в том, что эти рассчитанные данные разбиты у меня на 5 многомерных массивов, как сделать обновление таким образом, что бы каждый элемент массива попал в отдельный столбец? В принципе я думал эти 5 массивов объединить, в один. Но как вот сделать update пока что не совсем понимаю, просто если писать "столбец => значение" получиться долго, так как элементов много. Подскажите пожалуйста что тут можно сделать, заранее благодарю.

Лучший ответ

Аватар пользователя bumble bumble 16 декабря 2017 в 14:09
1

Бррр....

<?php
$fields 
= array();
for(
$i 0$i 7$i++) {
  
$fields["row1_col" . ($i 1)] = $table1[$i];
}
db_update('webformData')->fields($fields)->condition('id',$ID_db)->execute();
?>

И все равно жуть какая-то.
Не забывайте что Ваше "решение" могут принять за правильные действия, и у себя где-то повторить.

Комментарии

Аватар пользователя shlop shlop 16 декабря 2017 в 13:16

Здравствуйте, уже нашел решение, записываю в массив колонки из БД $colum, а потом формирую массив $fields, где ключ, это имя колонки, а значение, это значение которое нужно вставить в БД. А затем выполняю db_update в цикле. Вот сам код:

<?php
    $colum 
= array("row1_col1","row1_col2","row1_col3","row1_col4","row1_col5","row1_col6","row1_col7");
    for(
$i 0$i 7$i++) {
    
$fields = array(
    
$colum[$i] => $table1[$i],
    );
    
db_update('webformData')->fields($fields)->condition('id',$ID_db)->execute();
    }
?>
Аватар пользователя bumble bumble 16 декабря 2017 в 14:09
1

Бррр....

<?php
$fields 
= array();
for(
$i 0$i 7$i++) {
  
$fields["row1_col" . ($i 1)] = $table1[$i];
}
db_update('webformData')->fields($fields)->condition('id',$ID_db)->execute();
?>

И все равно жуть какая-то.
Не забывайте что Ваше "решение" могут принять за правильные действия, и у себя где-то повторить.

Аватар пользователя shlop shlop 16 декабря 2017 в 17:26

Ну кстати да, можно и так тоже, но в моём случае тут ещё и row каждый раз увеличивается. То есть вот структура такая:
"row1_col1","row1_col2","row1_col3","row1_col4","row1_col5","row1_col6" а потом
"row2_col1","row2_col2","row2_col3","row2_col4","row2_col5","row2_col6".
Спасибо за ответ.

Аватар пользователя shlop shlop 16 декабря 2017 в 17:38

Не совсем понял, то есть это же у меня кстати каждая итерация, запрос отправляла, то что в цикле был db_update. А у Вас же получается, формируется массив, а потом одним запросом всё вставляется. Собственно сейчас исправляю у себя)

Аватар пользователя shlop shlop 16 декабря 2017 в 17:58

Спасибо большое. Теперь не нужно мне создавать большой массив с колонками, а я ещё в своём варианте когда делал, из многомерного массива делал одномерный, но тут вот теперь с Вашей помощью, могу и не переводить, а работать с многомерным.

<?php
     $fields 
= array();
     for(
$i 0$i 7$i++) {
         for(
$j 0$j 6$j++) {
             
$fields["row".($i+1)."_col".($j+1)] = $table1[$i][$j];
         }
     }
?>

Только как мне теперь с остальными, там просто ещё 4 таки же массива. Есть мысли что, по такому же принципу, а потом объединить их в один $fields.