Обновить несколько строк sql php - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть таблица баланса, подобная этой: -

 id | balance |user
 1  | 5       |test
 2  | 6       |test1

Теперь у меня есть массив из системы, подобный этой, показывающий имена пользователей: -

 $arr = array(0 => test, 1 => test1)

Теперь еще один массив со значениями длябыть добавленным в порядке

 $bal = array(0 => 3, 1 => 4)

Так что баланс становится 8 для test и 10 для test1, я пытаюсь это: -

 $sql = "UPDATE balance
SET balance = balance + IN (".implode(',',$bal).") WHERE username IN (".implode(',',$arr).")";
 $query = mysqli_query($conn, $sql);

Но я получаюSubquery returns more than 1 row.Помощь оценена

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Лучший способ объединить запросы SQL в один запрос и выполнить его с помощью mysqli_multi_query.Потому что это будет очень медленно с большими таблицами.

Вот рабочий пример.

SQL-код для проверки

create table users_balance (
    id serial,
    user_id int unsigned not null,
    balance int unsigned not null
);
insert into users_balance (user_id, balance) values (1, 111), (2, 222), (3, 333);

PHP-код для проверки

<?php
$db = mysqli_connect("localhost", "test123", "test123", "test123");
if (!$db) { echo "Connect error: " . mysqli_connect_error() . PHP_EOL; exit; }

$users = array(1 => 'user1', 2 => 'user2', 3 => 'user3');
$new_balance = array(1 => 100, 2 => 200, 3 => 300);

$sql = '';
foreach ($new_balance as $user_id => $amount) {
    $sql .= "UPDATE users_balance SET balance = balance + $amount WHERE user_id=$user_id;";
}
mysqli_multi_query($db, $sql);

mysqli_close($db);
?>

После создания таблицы и вставки пользователей:

select * from users_balance;
+----+---------+---------+
| id | user_id | balance |
+----+---------+---------+
|  1 |       1 |     111 |
|  2 |       2 |     222 |
|  3 |       3 |     333 |
+----+---------+---------+

После выполнения сценария

select * from users_balance;
+----+---------+---------+
| id | user_id | balance |
+----+---------+---------+
|  1 |       1 |     211 |
|  2 |       2 |     422 |
|  3 |       3 |     633 |
+----+---------+---------+
0 голосов
/ 21 сентября 2018

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

foreach ($bal as $key => $amount) {
    $username = mysqli_real_escape_string($conn, $arr[$key]);
    mysqli_query($conn, "UPDATE balance SET BTC = (BTC + $amount) WHERE username = '$username'");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...