|
|
|
не получаеться написать код - обнуляюца значения
|
|||
|---|---|---|---|
|
#18+
суть задачи. есть пользователи, у них есть размер потребления услуги(поле) есть щета (один к одному) пользователей с балансом и последней датойвременем билинга. и вот запуская очередной билинг, он должен по сути 1)пощатать сумму для списания = такса * на промежуток времени между сейчас и последним списанием 2)обновить на єту величину(отрицательную) поле баланса, и естественно метку времени последнего списания. ДЕЛАЮ 1)открываю курсор на получения троек значений (idcurrency,.user.size,currency.last) iduser = idcurrency курсор нужен так как там матюки идут на попытку делать селект из таблицы щетов и её же обновлять - update currencys select ...from users join currencys ... не получаеться. по всякому делал на лету временую таблицу - один чорт ругаеться. 2) беря по одной записи щитаю сколько списать надо Код: sql 1. 2. 3. 4. 5. 6. 7. про вставку обьясню изменение баланса просиходит путём записи в таблицу логизменений (вставка) а её тригер произведёт апдейт баланса с учётом возможной скидки и прочей мути. пока что тупо апдейт без скидок и прочего.... (без курсора, через вставку тоже ругаеться, на попытку менять таблицу при чтении из которой запускаються изменения) в таблицах где храниться баланс, или изменение, везде используеться тип DECIMAL(21,17) в тригере log_currencys_insert_after арифметика простая update currency set `last` = NEW.time, balance = balance + NEW.addmoney; addmoney как описано выше =users.size* TIMESTAMPDIFF(SECOND,iNow,currencys.last) * tax где размер услуги - целое большое число tax = CAST(5 as DECIMAL(21,17))/DAYOFMONTH(LAST_DAY(NOW()))/3600/24/1099511627776; и что интересно Код: sql 1. 2. 3. 4. 5. 6. 7. вот этот код выдаёт не нулевые изменения баланса -0.000000014435614884635548532745 - вот такого типа изменения как я полагаю имено такое изменение я щитываю в переменную из курсора (переменая тоже число(21,17)) а потом гдето происходит округление. не могу понять где? ЗЫ грёбанное автоприведение типов. ЗЫЗЫ когда я инициализировал билинг (муть ещо та, но по сути я запускал похожий код для прощёта начального баланса ..разница была лишь в получении последней даты и размера вместа поля размер и последнияя дата было джоин таблицы услуг, и sum(ислуга.размер * таксу * (сейчас - услуга.начало) счас когда билинг, сума всех услуг уже готовая, на старте просто просумировал по каждой услуге. и не было зануления значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 13:26:19 |
|
||
|
не получаеться написать код - обнуляюца значения
|
|||
|---|---|---|---|
|
#18+
alex564657498765453делал на лету временую таблицу - один чорт ругаетьсячто-то не так делали, значит alex564657498765453грёбанное автоприведение типов.ну приведите типы вручную _везде_, и посмотрите, останется ошибка или нет ЗЫ. так и не понял, значения чего обнуляются - дельт или итогов ЗЗЫ. и скажите название системы, чтобы мы были в курсе, куда деньги класть не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 13:42:55 |
|
||
|
не получаеться написать код - обнуляюца значения
|
|||
|---|---|---|---|
|
#18+
tangliralex564657498765453делал на лету временую таблицу - один чорт ругаетьсячто-то не так делали, значит alex564657498765453грёбанное автоприведение типов.ну приведите типы вручную _везде_, и посмотрите, останется ошибка или нет ЗЫ. так и не понял, значения чего обнуляются - дельт или итогов ЗЗЫ. и скажите название системы, чтобы мы были в курсе, куда деньги класть не надо сразу видно кто в мыслях меня всегда держит :) приятно... инсерт уже вставляет зануленые значения. получаеться, что селект аля который беря поле сайз выщитывает мелкодробное значение - всё работает - он выдаёт кучу нулей после запятой и потом значащие цифры. хранимка же где это делаеться в два этапа - курсор на выборку и для каждого полученого из курсора сайт выщитывает по тем же самым формулам величину которую и вставляет в таблицу - вставляет ноль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 14:35:29 |
|
||
|
не получаеться написать код - обнуляюца значения
|
|||
|---|---|---|---|
|
#18+
tangliralex564657498765453делал на лету временую таблицу - один чорт ругаетьсячто-то не так делали, значит alex564657498765453грёбанное автоприведение типов.ну приведите типы вручную _везде_, и посмотрите, останется ошибка или нет ЗЫ. так и не понял, значения чего обнуляются - дельт или итогов ЗЗЫ. и скажите название системы, чтобы мы были в курсе, куда деньги класть не надо а деньги можно будет класть смело. вишь, ещо даже до релиза не дошло, а я даже такие недочоты нахожу. (при реальных обьёмах там значения будут больше 1, но для тестов я расматриваю теоретически минимальные значения - дабы убедиться, что нигде точность не седаеться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 14:36:56 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38658665&tid=1834733]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 348ms |

| 0 / 0 |
