Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
8 / 5 / 3
Регистрация: 11.03.2015
Сообщений: 94
1

Хранимая процедура для нарастающего итога

16.10.2015, 13:10. Показов 1128. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, специалисты!
Есть таблица
Код
  `id` mediumint(8) unsigned AUTO_INCREMENT,
  `user` mediumint(8) unsigned,
  `sum` float,
  `total` float
в ней уже есть нужные значения в полях sum.
Нужно для конкретно заданного user пробежаться по его записям и в поля total записать то, что получится, если к предыдущему total добавить текущую sum (но только в том случае, если имеющееся в total значение отличается от рассчитанного), также посчитать, сколько пришлось сделать таких изменений и ещё вернуть последний total
Другими словами, пересчитать нарастающий итог.
Перед началом пробега, считаем, что предыдущий total юзера равен 0.
Ну и, собственно, как это правильно вызвать из php?
Можно было бы циклом программно:
1. выбрать SELECT * FROM " . PAYMENT_TABLE . " WHERE `user`=$user_id";
2. пробежаться циклом по выборке: если $row['total']!==$allSum+$row['sum'], то делаем update и увеличиваем счётчик изменений.
Но хочется ХП, т.к. количество записей будет расти и этот цикл увеличит нагрузку на сервак.
Помогите, плз.

Добавлено через 15 часов 44 минуты
Люди, ну помогите же!
Неужели такой сложный вопрос для тех, кто с этим сталкивался?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2015, 13:10
Ответы с готовыми решениями:

Хранимая процедура для вставки данных
Доброго времени суток!!! Пытаюсь написать хранимую процедуру для вставки данных в таблицу. Делаю...

Хранимая процедура для объединения полей в БД
Добрый день. Есть 3 таблицы: 1. orders 2. products 3. orderItems: id idOrder(forein key на...

Хранимая процедура для выбора определённых значений
Доброго времени суток. Понять не могу как написать хранимую процедуру для выбора значений из...

Хранимая процедура
DELIMITER // DROP PROCEDURE IF EXISTS proc // CREATE PROCEDURE proc(IN ch VARCHAR(30)) BEGIN...

5
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
16.10.2015, 19:58 2
Это делается в один update с использованием пользовательских переменных.
Есть несколько тонкостей при работе с переменными см тут.
1
8 / 5 / 3
Регистрация: 11.03.2015
Сообщений: 94
16.10.2015, 21:15  [ТС] 3
Для такого Update предполагается Select. А php, если я не ошибаюсь, не позволяет два запроса запихнуть в одно обращение к БД. Как же быть тогда?
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
17.10.2015, 02:32 4
запрос один - многотабличный update
в качестве одной из таблиц будет выступать select
статья на русском где есть подобный пример
пометить важными статьи авторов, имеющих более 10 публикаций
MySQL
1
2
UPDATE articles, (SELECT author FROM articles GROUP BY 1 HAVING count(*)>10) t 
SET important=1  WHERE author = t.author;
1
8 / 5 / 3
Регистрация: 11.03.2015
Сообщений: 94
17.10.2015, 02:55  [ТС] 5
А в моём случае как?
Эх, наглеть так наглеть: напишите уже полностью запрос.
Я вам сеном откошу.

Добавлено через 17 минут
MySQL
1
2
UPDATE payments, (SELECT sum FROM payments WHERE user=100) p 
SET total=p.total+sum WHERE user=100
так что ли?
0
411 / 365 / 142
Регистрация: 09.04.2011
Сообщений: 1,051
19.10.2015, 04:49 6
А переменные где?
MySQL
1
2
3
4
update test t,
(SELECT id, if(@u=`user`,5,@t:=0), if(@u=`user`,5,@u:=`user`), @t:=@t+`sum` total
FROM test, (select @t:=0, @u:=0) x order by `user`) t1
set t.total=t1.total where t.id=t1.id;
0
19.10.2015, 04:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2015, 04:49
Помогаю со студенческими работами здесь

Хранимая процедура
Добрый день! Написал хранимую процедуру, но выдает ошибку "#1064 - You have an error in your SQL...

Хранимая процедура
Помогите пожалуйста кто чем сможет!Есть 5 состояний, допустим последовательный...

Хранимая процедура в phpmyadmin
Хотел создать хранимую процедуру, для выгрузки данных из datagrid в соответствующую таблицу в БД,...

Хранимая процедура. Линейное уравнение
Здравствуйте, подскажите, пожалуйста, как правильно написать решение линейного уравнения вида ax=b...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru