Название: Запрос для обновления баланса Отправлено: poxy. от 01 Июля 2013, 08:24:34 Доброе утро всем.
Вчера почему то упало ядро, запустил сегодня в 8 утра, соответственно поснимало за неполный месяц. Подскажите запрос для обновления баланса, чтоб к примеру 118.80 превратилось в 120.0. Название: Re: Запрос для обновления баланса Отправлено: Efendy от 01 Июля 2013, 09:41:00 Что-то у тебя странное на сервере, я специально не делал перезапускалку ядра, чтобы заставить ядро сделать надежным. На моем сервере работает месяцами и не падает.
Платежи и баланс в N+ работают абсолютно по той же схеме как и в Н49/50 - при изменение платежа необходимо править на туже величину и баланс. Т.е. делается 2 sql: Код: update pays set cash=cash+1.2 where id=12345 limit 1; здесь: 1.2 - на сколько хотим изменить платеж 12345 - id платежа 123 - id клиента limit 1 - страховка, а то дрогнет рука и без условия заапдейтится вся таблица Название: Re: Запрос для обновления баланса Отправлено: poxy. от 01 Июля 2013, 10:11:20 по поводу id клиента, изменит тому чей id указан, а мне нужно сразу всем у кого снялось 118, у кого другой тариф не изменять
PS если руками изменяю платеж "снятие за услуги" то баланс тоже меняется, может можно как то поправить платежи "снятие за ... 118.0" на 120? Название: Re: Запрос для обновления баланса Отправлено: Efendy от 01 Июля 2013, 10:42:18 У тебя тарифы в режиме "от текущего момента до 1го числа" типа как в старом нодени?
Код: update users set balance=balance-2 where id in(select mid from pays where category=100 and cash=-118 and time>(unix_timestamp()-2*24*3600)); сначала изменяется баланс клиентов, которых есть платеж "снятие за услуги" (категория 100) в размере 118грн не раньше двух дней назад (2*24*3600), затем изменяются эти платежи. Название: Re: Запрос для обновления баланса Отправлено: poxy. от 01 Июля 2013, 10:57:46 Цитировать У тебя тарифы в режиме "от текущего момента до 1го числа" типа как в старом нодени? Да, стоит "конец месяца"Название: Re: Запрос для обновления баланса Отправлено: poxy. от 01 Июля 2013, 12:00:51 спасибо
Название: Re: Запрос для обновления баланса Отправлено: poxy. от 01 Июля 2013, 13:55:03 Чтоб не создавать отдельный пост спрошу тут:
В платежах : Цитировать Проверка системы Уровень проблемы Проблема 3 Есть расхождения суммы платежей и баланса клиента Где посмотреть что не сошлось? Название: Re: Запрос для обновления баланса Отправлено: Efendy от 01 Июля 2013, 13:59:21 Код: perl /usr/local/nodeny/nokernel.pl -m=system_check -v где видим: Код: 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 u.balance<>chk_balance Название: Re: Запрос для обновления баланса Отправлено: poxy. от 01 Июля 2013, 14:04:58 спасибо
Название: Re: Запрос для обновления баланса Отправлено: Efendy от 19 Августа 2015, 10:36:16 На всякий случай sql, который установит всем абонам, у которых несхождение баланса, правильные балансы по сумме платежей:
Код: UPDATE users u JOIN (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 u.balance<>chk_balance) a ON u.id=a.id SET u.balance=a.chk_balance; Естественно, перед выполнением (любых) sql нужно делать бекапы базы Название: Re: Запрос для обновления баланса Отправлено: elvin от 23 Октября 2020, 09:02:20 Код: perl /usr/local/nodeny/nokernel.pl -m=system_check -v где видим: Код: 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 u.balance<>chk_balance Не срабатывает если расхождение в пару копеек, но в лог пишет, как быть в этом случае? спасибо! Название: Re: Запрос для обновления баланса Отправлено: k291 от 19 Февраля 2024, 21:45:13 На всякий случай sql, который установит всем абонам, у которых несхождение баланса, правильные балансы по сумме платежей: Код: UPDATE users u JOIN (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 u.balance<>chk_balance) a ON u.id=a.id SET u.balance=a.chk_balance; Естественно, перед выполнением (любых) sql нужно делать бекапы базы Чтобы не искали: Код: mysql -u root --password='hardpass' |