Биллинговая система Nodeny
15 Мая 2024, 20:50:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Выровнять баланс  (Прочитано 5364 раз)
Stronglan
Постоялец
***

Карма: -3
Offline Offline

Сообщений: 185


Просмотр профиля Email
« : 05 Ноября 2014, 22:01:25 »

В платежах периодически видно следующее: "расхождения суммы платежей и баланса клиента" Подскажите можно ли это как-то исправить, в 50 версии знаю можно было.
Записан
Dolphin
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #1 : 05 Ноября 2014, 22:58:12 »

Я вот так проверяю расхождение:
Код:
SELECT u.*, SUM(p.`cash`) AS sum_cash FROM `pays` AS p LEFT JOIN `users` AS u ON u.`id`=p.`mid` GROUP BY p.`mid` HAVING `balance`!=`sum_cash`

А так выравниваю:
Код:
INSERT INTO `tmp` SELECT `mid`, SUM(`cash`) FROM `pays` where `mid`!='0' group by `mid`
UPDATE `users` SET `users`.`balance`=(SELECT `sum` FROM `tmp` WHERE `tmp`.`mid`=`users`.`id` LIMIT 1)
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #2 : 06 Ноября 2014, 01:09:51 »

А так выравниваю:
Код:
INSERT INTO `tmp` SELECT `mid`, SUM(`cash`) FROM `pays` where `mid`!='0' group by `mid`
UPDATE `users` SET `users`.`balance`=(SELECT `sum` FROM `tmp` WHERE `tmp`.`mid`=`users`.`id` LIMIT 1)
только не в данной ситуации....

UPDATE `users` SET `users`.`balance`  не катит - в данном случае задача была обратной
выровнять платежи по балансу.
Записан
vddav
Старожил
****

Карма: 3
Offline Offline

Сообщений: 251


Просмотр профиля Email
« Ответ #3 : 06 Ноября 2014, 13:48:53 »

я делал как то так, бэкап и проверить в песочнице!!!
Код:
drop table if exists balance_help;
create table balance_help as
SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING `balance`!=`sum_cash`;
# проводим платеж бонусом
insert into pays (`mid`, `cash`, `category`, `time`, `comment`, `creator`) select id, balance-chk_balance, 2 as category, UNIX_TIMESTAMP() as `time`, "auto balance repair" as comment, "kernel" as creator from balance_help;
drop table balance_help;
Записан
vddav
Старожил
****

Карма: 3
Offline Offline

Сообщений: 251


Просмотр профиля Email
« Ответ #4 : 06 Ноября 2014, 13:50:51 »

P.S. баланс клиента остается тот же, а платежах добавляется запись бонусным платежом
Записан
vddav
Старожил
****

Карма: 3
Offline Offline

Сообщений: 251


Просмотр профиля Email
« Ответ #5 : 06 Ноября 2014, 14:03:17 »

ошибка в строке
Код:
SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING `balance`!=`sum_cash`;
поменять в конце HAVING `balance`!=`sum_cash` -> HAVING `balance`!=`chk_balance`
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #6 : 06 Ноября 2014, 14:15:28 »

ошибка в строке
Код:
SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING `balance`!=`sum_cash`;
поменять в конце HAVING `balance`!=`sum_cash` -> HAVING `balance`!=`chk_balance`

я скриптом решил
надо было еще дату первого события ....
+ разница была как минус так и плюс
 
Записан
vddav
Старожил
****

Карма: 3
Offline Offline

Сообщений: 251


Просмотр профиля Email
« Ответ #7 : 06 Ноября 2014, 15:59:07 »

ошибка в строке
Код:
SELECT u.id, u.balance, SUM(p.cash) AS chk_balance FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING `balance`!=`sum_cash`;
поменять в конце HAVING `balance`!=`sum_cash` -> HAVING `balance`!=`chk_balance`

я скриптом решил
надо было еще дату первого события ....
+ разница была как минус так и плюс
 

ну так при инсерте вычитается же из реального баланса, баланс по платежам , так же может быть +/-, а в первом запросе если добавить условие по времени, категории.., вообще запрос думался для округления баланса от копеек, точнее после его округления))). хотя когда то давным давно, в другой галактике, оперуполномоченые  кришна просили в коробку округление)))
Записан
ser970
NoDeny
Спец
*

Карма: 70
Offline Offline

Сообщений: 1323

262462619
Просмотр профиля Email
« Ответ #8 : 06 Ноября 2014, 16:21:19 »

ну так при инсерте вычитается же из реального баланса, баланс по платежам , так же может быть +/-, а в первом запросе если добавить условие по времени, категории.., вообще запрос думался для округления баланса от копеек, точнее после его округления))). хотя когда то давным давно, в другой галактике, оперуполномоченые  кришна просили в коробку округление)))
надо было не условие по времени
а скажем первый платеж или списание было 12.12.2000
разница по по суммам -12грн
надо инсерт   11.12.200   +12грн
или абон есть по платежам нету вообще суммы а разница -15...

решать можно какими угодно путями , главное результат.
Записан
vddav
Старожил
****

Карма: 3
Offline Offline

Сообщений: 251


Просмотр профиля Email
« Ответ #9 : 06 Ноября 2014, 17:44:44 »

Цитировать
решать можно какими угодно путями , главное результат.

абсолютно в дырочку)Подмигивающий
Записан
Redmen
NoDeny
Ветеран
*

Карма: 62
Offline Offline

Сообщений: 546


Подяку в КАРМУ


Просмотр профиля WWW
« Ответ #10 : 05 Марта 2017, 16:46:18 »

может тема и устарела, но на всякий случай, вариант без вьюх и промежуточных таблиц!
запрос для выравнивания платежей к балансу:
Код:
INSERT INTO pays (`mid`, `cash`, `category`, `time`, `comment`, `creator`)
SELECT u.id AS mid, (u.balance-SUM(p.cash)) AS cash, 2 AS category,
UNIX_TIMESTAMP() AS `time`,"Перенесення балансу зі старої бази даних" AS comment,
"kernel" AS creator FROM users u LEFT JOIN pays p ON u.id=p.mid GROUP BY u.id HAVING cash <>0
Записан

Приймаю подяку у вигляді карми... та/або грошей Подмигивающий
t.me/MrMethod
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #11 : 05 Марта 2017, 17:42:30 »

Добавлю в FAQ
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!