CREATE TABLE `balance` (
`id_user` mediumint(8) unsigned NOT NULL,
`id_cur` tinyint(3) unsigned NOT NULL,
`num` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `balance`
ADD UNIQUE KEY `id_user` (`id_user`,`id_cur`);
В id_cur хранится номер валюты. В num - значение.
И есть функция для изменения балансов.
function balanceUpdate($array)
{
$arr = [];
foreach ($array as $k => $v)
{
$arr[0][] = '('. $this->id_user .', '. $k .', '. $v .')';
$arr[1][] = 'WHEN '. $k .' THEN `num` + '. $v;
}
DB::q("
INSERT INTO `balance` (`id_user`, `id_cur`, `num`) VALUES ". implode(', ' $arr[0]) ."
ON DUPLICATE KEY UPDATE `num` = CASE `id_cur` ". implode(' ' $arr[1]) ." END"
);
if (DB::affected_rows() != count($array))
exit('Error Class Balance Affected Row #1');
}
$this->id_user - id пользователя
Может у кого есть какие мысли как улучшить этот кусок кода(в том числе и сам запрос)