Как обновить несколько строк в таблице?

Мне нужно обновить таблицу daytot значениями, присутствующими в массиве с именем $result3.

Как это можно было сделать?

$this->db->select('tdate');
$this->db->where('tdate >=', $newDate);
$this->db->where('tdate <=', $date);
$result3=$this->db->get('daytot')->result_array();
$amount=$this->input->post('credit1');
for($i=0;$i<count($result3);$i++) {
    $opcash=$result3[$i]['opcash']+$amount;
    $data1 = array(
        'tdate'=>$newDate,
        'total_credit'=>$total_credit['amount'],
        'total_debit'=>$total_debit['amount'],
        'opcash'=>$opcash,
    ;
    $this->db->where('tdate', $result3[$i]);
    $this->db->update('daytot', $data1);
}

Что именно ты хочешь? Вы хотите избежать петли?

Penguine 28.12.2018 09:43

у меня более одного значения в $ result3, и я хочу обновить значение opcash до значений (дат), присутствующих в $ result3array

laavanya dharani 28.12.2018 09:48

Что в результате кода? Что не работает?

splash58 28.12.2018 09:54

я хочу обновить opcash до всей даты, которая присутствует в массиве $ result3

laavanya dharani 28.12.2018 09:57

opcash обновляется или нет?

Danish Ali 28.12.2018 10:01

@laavanyadharani каков результат массива $result3?

Danish Ali 28.12.2018 10:01

@DanishAli нет .. opcash не обновляется

laavanya dharani 28.12.2018 10:02

Попробуйте так: $ opcash = $ result3 ['opcash'] + $ amount;

Danish Ali 28.12.2018 10:03

Массив $ result3 имеет значения tdate ... это opcash, который необходимо обновить для значений массива $ result3

laavanya dharani 28.12.2018 10:04

Добавьте в свой вопрос структуру массива $result3.

Danish Ali 28.12.2018 10:04

я не могу использовать это, потому что у меня более одного индекса ... поэтому я использую цикл for

laavanya dharani 28.12.2018 10:05

@laavanyadharani какая линия, какое смещение?

splash58 28.12.2018 10:06

Используйте петлю foreach.

Danish Ali 28.12.2018 10:06

массив (1) {[0] => массив (1) {["tdate"] => строка (10) "24/12/2018"}} массив (2) {[0] => массив (1) { ["tdate"] => string (10) "25/12/2018"}} значение массива $ result3

laavanya dharani 28.12.2018 10:08

Я получаю неопределенное смещение в $ this-> db-> where ('tdate', $ result3 [$ i]); линия @ splash58

laavanya dharani 28.12.2018 10:09

В массиве нет opcash.

Danish Ali 28.12.2018 10:11

Да ... у меня есть значение opcash в массиве $ data1

laavanya dharani 28.12.2018 10:13

В этой строке кода $ opcash = $ result3 [$ i] ['opcash'] + $ amount; есть проблема. Поскольку смещения opcash не существует

Danish Ali 28.12.2018 10:14

добавлен opcash в массив $ result3 с той же проблемой

laavanya dharani 28.12.2018 10:17

Теперь это структура? array (1) {[0] => array (1) {["tdate"] => строка (10) "24/12/2018", ["opcash"] => строка (10) 'значение'}} array (2) {[0] => array (1) {["tdate"] => строка (10) "25/12/2018",, ["opcash"] => строка (10) 'значение'} } $ result3

Danish Ali 28.12.2018 10:19

да .. {["tdate"] => строка (10) "24/12/2018" ["opcash"] => строка (3) "500"} {["tdate"] => строка (10) " 25.12.2018 "[" opcash "] => строка (3)" 1000 "}

laavanya dharani 28.12.2018 10:20

посмотри на ответ, который я дал

Danish Ali 28.12.2018 10:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
22
107
3

Ответы 3

Попробуйте использовать цикл foreach для обновления записи

Структура массива $result3

{ ["tdate"]=> string(10) "24/12/2018" ["opcash"]=> string(3) "500" } { ["tdate"]=> string(10) "25/12/2018" ["opcash"]=> string(3) "1000" }

Так что попробуй вот так. И убедитесь, что у вас есть все значения переменных

$this->db->select('tdate');
$this->db->where('tdate >=', $newDate);
$this->db->where('tdate <=', $date);
$result3=$this->db->get('daytot')->result_array();
$amount=$this->input->post('credit1');

Теперь проверьте, есть ли у $result3 запись или нет

if (isset($result3) && count($result3) > 0){
foreach($result3 as $result) {
    $opcash=$result['opcash']+$amount;
    $data1 = array(
    'tdate'=>$newDate,
    'total_credit'=>$total_credit['amount'],
    'total_debit'=>$total_debit['amount'],
    'opcash'=>$opcash,
   ;
    $this->db->where('tdate', $result['tdate']);
   $this->db->update('daytot', $data1);
}
}

Я хочу, чтобы opcash обновлялся, чтобы быть обновленным для всей даты, присутствующей в массиве $ resul3

laavanya dharani 28.12.2018 10:40

не работает ... мне нужно обновить значение opcash на всю дату, которая находится в массиве $ result3

laavanya dharani 28.12.2018 11:22

ты понял мою проблему ??

laavanya dharani 28.12.2018 11:57

@laavanyadharani да.

Danish Ali 28.12.2018 12:01

получение неопределенного индекса opcash и tdate

laavanya dharani 28.12.2018 12:05

Попробуйте метод ниже. id - это уникальное значение из таблицы daytot, вы можете использовать любое уникальное поле.

$this->db->select('id, tdate, opcash'); //id => primary key
$this->db->where('tdate >=', $newDate);
$this->db->where('tdate <=', $date);
$result3 = $this->db->get('daytot')->result_array();
$amount  = $this->input->post('credit1');

Использование для

$data1 = array();
for ($i = 0; $i < count($result3); $i++) {
    $opcash = $result3[$i]['opcash'] + $amount;
    $data1[]  = array(
        'id'        => $result3[$i]['id'],
        'tdate'        => $newDate,
        'total_credit' => $total_credit['amount'],
        'total_debit'  => $total_debit['amount'],
        'opcash'       => $opcash
    );    
}
$this->db->update_batch('daytot', $data1, 'id');

ИЛИ Использование Foreach

foreach($result3 as &$data){
    $opcash = $data['opcash'] + $amount;
    $data['tdate'] = $newDate;
    $data['total_credit'] = $total_credit['amount'];
    $data['total_debit'] = $total_debit['amount'];
    $data['opcash'] = $opcash;    
}
$this->db->update_batch('daytot', $result3, 'id');

почему цикл for не работает, не могли бы вы объяснить? потому что я не мог найти никаких проблем.

Karthik Sekar 28.12.2018 10:49

@KarthikSekar получает неопределенный индекс tdate

laavanya dharani 28.12.2018 10:52

Мне нужно обновить значение opcash, где tdate присутствует в массиве $ result3

laavanya dharani 28.12.2018 10:57

сообщение об ошибке: Неопределенный индекс: tdate UPDATE daytot SET tdate = CASE WHEN tdate = THEN '24/12/2018' ELSE tdate END, total_credit = CASE WHEN tdate = THEN '2500' ELSE total_credit END, total_debit = CASE WHEN tdate = THEN NULL ELSE total_debit END, opcash = CASE WHEN tdate = THEN 1000 ELSE opcash END WHERE tdate IN ()

laavanya dharani 28.12.2018 10:58

похоже, что поле tdate в вашей таблице пусто. распечатать массив перед выполнением update_batch

Karthik Sekar 28.12.2018 10:59

array (1) {[0] => array (2) {["tdate"] => string (10) "24/12/2018" ["opcash"] => string (3) "500"}} Массив ([0] => Массив ([tdate] => 24/12/2018 [total_credit] => 3500 [total_debit] => [opcash] => 1000)) это мое значение data1

laavanya dharani 28.12.2018 11:03

распечатайте полный массив перед update_batch, например, на основе моего кода, если вы используете для print_r ($ data1), если вы используете foreach print_r ($ result3)

Karthik Sekar 28.12.2018 11:10

да сделано так rray (2) {[0] => array (2) {["tdate"] => string (10) "24/12/2018" ["opcash"] => string (3) "500 "} [1] => массив (2) {[" tdate "] => строка (10)" 25/12/2018 "[" opcash "] => строка (4)" 1000 "}} значение data1 .. но получение неопределенного индекса tdate

laavanya dharani 28.12.2018 11:19

Позвольте мне проверить в моем местном

Karthik Sekar 28.12.2018 11:29

@laavanyadharani, я могу обновиться, пожалуйста, обратитесь к моим скриншотам prnt.sc/m0kbmaprnt.sc/m0kcad

Karthik Sekar 28.12.2018 12:31

$ data1 = массив (); для ($ i = 0; $ i <count ($ result3); $ i ++) {$ opcash = $ result3 [$ i] ['opcash'] + $ amount; $ data1 [] = array ('tdate' => $ result3 [$ i] ['tdate'], 'total_credit' => $ total_credit ['amount'], 'total_debit' => $ total_debit ['amount'], 'opcash' => $ opcash); } я изменил свои данные1 вот так

laavanya dharani 28.12.2018 13:18

@KarthikSekar все еще получает неопределенный индекс tdate

laavanya dharani 28.12.2018 13:20

Я думаю, что ваша переменная данных update_batch неверна, ваша должна быть $ this-> db-> update_batch ('daytot', $ data1, 'tdate');

Karthik Sekar 28.12.2018 14:22

да, используется вот так ... теперь получается имя файла: C: /xampp/htdocs/Finance/system/database/DB_query_builder.php Номер строки: ошибка 1898

laavanya dharani 29.12.2018 06:23

извини .. у меня нет скайпа

laavanya dharani 29.12.2018 07:03

могу я подключить вас через teamviewer или anydesk ??

laavanya dharani 29.12.2018 07:08

давайте обсудим здесь chat.stackoverflow.com/rooms/185953/…

Karthik Sekar 31.12.2018 02:26

Позвольте нам продолжить обсуждение в чате.

laavanya dharani 31.12.2018 05:52

Для начала вам нужно также выбрать столбец opcash:

$this->db->select('tdate,opcash');

Затем примените индекс 0 к каждой итерации foreach:

if (isset($result3) && count($result3) > 0){
    foreach($result3 as $r) {
        $opcash=$r[0]['opcash']+$amount;
        $data1 = array(
            'tdate'=>$newDate,
            'total_credit'=>$total_credit['amount'],
            'total_debit'=>$total_debit['amount'],
            'opcash'=>$opcash,
        );
        $this->db->where('tdate', $r[0]['tdate']);
        $this->db->update('daytot', $data1);
    }
}

получение неопределенного смещения 1

laavanya dharani 28.12.2018 12:26
undefined offset 1 в какой строке?
Hasta Dhana 28.12.2018 12:53

$ opcash = $ r [0] ['opcash'] + $ amount; $ this-> db-> where ('tdate', $ r [0] ['tdate']); в обеих строках

laavanya dharani 28.12.2018 13:09

что будет, если убрать [0] на каждой строчке?

Hasta Dhana 28.12.2018 13:35

недопустимый аргумент для foreach

laavanya dharani 28.12.2018 13:40

не 0 в строке foreach, а в строке $r[0] ... замените все $r[0] на $r и что будет на выходе?

Hasta Dhana 28.12.2018 14:26

Другие вопросы по теме