|
|
|
Запрос в MySQL
|
|||
|---|---|---|---|
|
#18+
привет всем! Помогите с запросом, что-то не могу понять как. Есть таблица с числами. Допустим вот такая, три поля. Первое ID, число которое прибавляется и поле - результат прибавления этого числа к тому что было до этого в TOTAL. Например так: ID - Digit - TOTAL =========== 1 - 50 - 100 2 - 10 - 110 3 - 30 - 140 4 - 50 - 190 =========== и так далее. Видно что есть слагаемое, и сумма этого слагаемого и предыдущей суммы. Как как сделать одним запросом, чтобы добавить строку в базу, чтобы сразу вставилось число то которое мне надо и в TOTAL сумма этого числа и найденного последнего значения суммы (TOTAL) по ID? Думаю получилось объяснить что надо. За ранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2016, 15:04 |
|
||
|
Запрос в MySQL
|
|||
|---|---|---|---|
|
#18+
ну, в лоб, по шагам найдем Тотал по посл ID SELECT t1.total FROM MyTable as t1, (SELECT MAX(id) FROM MyTable) as t2 WHERE t2.id=t1.id INTO @MyTotal InSERT INTO MyTable(Digit,Total) .... VALUES (@Digit, @Digit+@MyTotal) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2016, 16:10 |
|
||
|
Запрос в MySQL
|
|||
|---|---|---|---|
|
#18+
ааа.. ну да одним запросом.... Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2016, 16:19 |
|
||
|
Запрос в MySQL
|
|||
|---|---|---|---|
|
#18+
Спасибо, вроде общий понял смысл. Но на реальной задаче не получается что-то, так как она немного по-другому. Этот пример дал простой, чтобы понять смысл :) Вот как сделать, если в этой таблице есть ID_VAR - это ID абонента и другие поля. Надо вставить новую строку, которая есть сумма последнего TOTAL и того что вставляю. Но только уже по ID_VAR (id абонента). У каждого абонента идёт свой счёт. ID - ID_VAR - Digit - TOTAL - COMMENT - DATE ============================== 1 - 1005 - 50 - 100 - коммент - дата 2 - 1006 - 10 - 200 - коммент - дата 3 - 3000 - 30 - 300 - коммент - дата 4 - 1005 - 50 - 150 - коммент - дата 5 - 1006 - 10 - 210 - коммент - дата 6 - 3000 - 30 - 330 - коммент - дата ... и т.д ... =========== То есть по логике сначала мне надо узнать последнее TOTAL нужного мне абонента, это: select TOTAL from MyTable where ID_VAR='1005' order by ID desc limit 1; тут я получаю последнее TOTAL - то, что мне надо (150), а после уже вставить его в MyTable под своим ID_VAR: insert into MyTable ('ID_VAR', 'Digit', 'TOTAL', COMMENT', 'DATE' ) и вот тут как дальше select (@ID_VAR, @Digit, @Digit+TOTAL, 'мой комментарий', now()) или как? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 11:38 |
|
||
|
Запрос в MySQL
|
|||
|---|---|---|---|
|
#18+
так а что это меняет? ровно ничего, кроме where ID_VAR='1005' вопрос то в чем? Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 13:23 |
|
||
|
Запрос в MySQL
|
|||
|---|---|---|---|
|
#18+
А, ну да, точно. Я что-то удлинил, сделал так: INSERT INTO MyTable(`id_var`,`Digit`,`Total`) SELECT t1.id_var, @Digit, @Digit+t1.total FROM MyTable as t1, (SELECT id as MaxId FROM MyTable WHERE ID_VAR='1005' order by id desc limit 1) as t2 WHERE t2.id=t2.MaxId А в последней строке точно надо t2.id=t2.MaxId или t1.id=t2.MaxId t1.id или t2.id в сравнении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 13:42 |
|
||
|
Запрос в MySQL
|
|||
|---|---|---|---|
|
#18+
опечатка конечно Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2016, 13:56 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39246333&tid=1831723]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
154ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 450ms |

| 0 / 0 |
