Обновить вторую таблицу на основе данных первой таблицы в Codeigniter - PullRequest
0 голосов
/ 04 августа 2020

У меня есть запрос, который обновляет данные в 'members' таблице:

$this->db->set('game_vault_balance', 'CASE WHEN game_vault_balance > 0 THEN game_vault_balance - (@sum_from_vault := 0.27 / 100 * game_vault_balance) ELSE @sum_from_vault := game_vault_balance END', FALSE);
    $this->db->set('available_game_balance', 'available_game_balance + @sum_to_second_table := (@sum_from_vault + ((110 / 100) * rating * @sum_from_vault))', FALSE);
    $this->db->set('game_balance_last_time', 'NOW()', FALSE);
    $this->db->where('game_balance_last_time <= now() - INTERVAL 1 DAY');
    $this->db->limit(1000);
    $this->db->order_by('rating', 'DESC');
    $this->db->update('members');

И у меня есть вторая таблица 'settings':

+------+-----------+------------------+----------+---------------------+
|id    | category  | setting_name     | value    | datetime            |
+----------------------------------------------------------------------+
| 1    | my_cat    | sett_name        | 0        | 2020-08-02 22:29:06 |
+------+-----------+------------------+----------+---------------------+
| 2.   | cat2      | sett_name2       | 1        | 2020-08-02 22:29:06 |
+------+-----------+------------------+----------+---------------------+

Как видите, это запрос имеет переменную @sum_to_second_table. Сразу после (или может быть во время) обновления данных в таблице 'members' мне нужно обновить 'sett_name' value' таблицы 'settings' с помощью 'value + @sum_to_second_table', а также новую дату. Так что 'value' будет суммой @sum_to_second_table всех строк из запроса в 'members' таблицу.

Я думаю, что JOIN здесь не работает. Есть идеи?

ОБНОВЛЕНИЕ

Я хочу сделать что-то вроде этого:

$this->db->set('members.game_vault_balance', 'CASE WHEN game_vault_balance > 0 THEN game_vault_balance - (@sum_from_vault := 0.27 / 100 * game_vault_balance) ELSE @sum_from_vault := game_vault_balance END', FALSE);
        $this->db->set('members.available_game_balance', 'available_game_balance + @sum_to_second_table := (@sum_from_vault + ((110 / 100) * rating * @sum_from_vault))', FALSE);
        $this->db->set('members.game_balance_last_time', 'NOW()', FALSE);
        $this->db->set('settings.value', 'value + @sum_to_second_table', FALSE);
        $this->db->set('settings.datetime', 'NOW()', FALSE);
        $this->db->where('game_balance_last_time <= now() - INTERVAL 1 DAY');
        $this->db->where('settings.value', 'sett_name');
        $this->db->limit(1000);
        $this->db->order_by('rating', 'DESC');
        $this->db->update('members, settings');

Но у меня ошибка:

Номер ошибки: 1146

Table 'my_database_name.members,' doesn't exist

UPDATE `members,` `settings` SET members.game_vault_balance = CASE WHEN game_vault_balance > 0 THEN game_vault_balance - (@sum_from_vault := 0.27 / 100 * game_vault_balance) ELSE @sum_from_vault := game_vault_balance END, members.available_game_balance = available_game_balance + @sum_to_second_table := (@sum_from_vault + ((110 / 100) * rating * @sum_from_vault)), members.game_balance_last_time = NOW(), settings.value = value + @sum_to_second_table, settings.datetime = NOW() WHERE `game_balance_last_time` <= now() - INTERVAL 1 DAY AND `settings`.`value` = 'sett_name' ORDER BY `rating` DESC LIMIT 1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...