[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ON DUPLICATE KEY UPDATE CASE
Страницы: 1, 2
123456
Есть таблица для хранения балансов пользователя

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 пользователя
Может у кого есть какие мысли как улучшить этот кусок кода(в том числе и сам запрос)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.