Я пытаюсь провести мероприятие, которое проводится каждый день в 23:59.Чтобы я проверил записи (код) таблицы (tblpuntoAttencion) и с помощью результата сделал вид foreach, добавил значение другой таблицы, сгруппированной по коду (записи, к которым обращались ранее) и в зависимости от состояния, равного 1, и вычел данныеиз той же таблицы, в зависимости от состояния 2 и добавления другого значения другой таблицы (tblrecaudo), для каждой записи я вставляю данные в другую таблицу (tblsaldos).Я надеюсь, что вы можете мне помочь.Вот таблицы и некоторые записи:
Я сделал несколько запросов, но я не знаю, как выполнить цикл так, чтобы для каждой записи в tblpuntoAttencion
она сохранялась в данныхв tblSaldo
CREATE TABLE tblenvios (
idEnvio int(11) NOT NULL,
valor double NOT NULL,
fecha date NOT NULL,
estado enum('1','2') NOT NULL,
puntoA_E int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO tblenvios (idEnvio, valor, fecha, estado, puntoA_E) VALUES
(100001, 50000, '2019-03-18', '1', 8000),
(100002, 80000, '2019-03-18', '1', 8000),
(100003, 100000, '2019-03-18', '2', 8000),
(100004, 60000, '2019-03-18', '1', 8002);
CREATE TABLE tblpuntoatencion (
id int(11) NOT NULL,
codigo int(11) NOT NULL,
barrio varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO tblpuntoatencion (id, codigo, barrio) VALUES
(1, 8000, 'Bosque'),
(2, 8001, 'Mercado'),
(3, 8002, 'Palmeras');
CREATE TABLE tblrecaudo (
idRecaudo int(11) NOT NULL,
valorRecaudo double NOT NULL,
fecha date NOT NULL,
puntoA int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO tblrecaudo (idRecaudo, valorRecaudo, fecha, puntoA) VALUES
(1, 30000, '2019-03-16', 8000),
(2, 20000, '2019-03-18', 8000),
(3, 40000, '2019-03-18', 8001);
CREATE TABLE tblsaldo (
idSaldo int(11) NOT NULL,
codigoPa int(11) NOT NULL,
saldo int(11) NOT NULL,
fecha int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
**tblPuntoAtencion**
----------------------------------------------------------
id codigo barrio
1 8000 bosque
2 8001 mercado
3 8002 palmeras
-----------------------------------------------
**tblEnvios**
-------------------------------------------
idEnvio valor fecha estado puntoA_E
100001 50000 18-03-2019 1 8000
100002 80000 18-03-2019 1 8000
100003 100000 18-03-2019 2 8000
100004 60000 18-03-2019 1 8002
-----------------------------------------------------
**tblrecaudo**
----------------------------------------------------
idrecaudo valorRecaudo fecha puntoA
1 30000 2019-03-16 8000
2 20000 2019-03-18 8000
3 40000 2019-03-18 8001
----------------------------------------------------------
Здесь я хочу сохранить записи:
**tblsaldo**
idSaldo
codigoPa
saldo
fecha
В сумме tblEnvios
сумма с состоянием 1 для pointA_E и текущей даты и вычесть значение с состоянием 2по точке A, текущей дате и добавляется значение tblrecaudo
по точке A и текущей дате ", при условии, что текущая дата равна 2019-03-18"
Example:
codigo valor estado - codigo valor estado + puntoA valorRecaudo = puntoA total
8000 130000 1 - 8000 100000 2 + 8000 20000 = 8000 50000
**expected results**
puntoA total fechaactual
8000 50000 2019-03-18
8001 40000 2019-03-18
8002 60000 2019-03-18
И эти данные сохраняются в tblsaldo
таблица
SELECT codigo FROM tblpuntoAtencion
С помощью этого кода я могу получить коды точек внимания:
SELECT SUM(CASE WHEN E.puntoA_E = 8000 AND E.estado = 1 THEN E.valor ELSE 0 END) - SUM(CASE WHEN E.puntoA_E = 8000 AND E.estado = 2 THEN E.valor ELSE 0 END) + SUM(CASE WHEN R.puntoA = 8000 THEN R.valorRecaudo ELSE 0 END) AS total FROM tblenvios E,tblrecaudo R where E.puntoA_E=R.puntoA AND R.fecha ='2019-03-18' AND E.fecha ='2019-03-18' order by puntoA_E;
С помощью этого запроса мне выводится результат суммирования tblEnvios
иtblrecaudo
но что-то не хватает в условии даты не дает мне точные данные и E.puntoA_E является динамическим
Trying to make the event:
CREATE EVENT guardaSaldo
ON SCHEDULE
EVERY 1 day STARTS '2019-03-18 23:59:00' + interval 1 day do
begin
SELECT codigo FROM tblpuntoAtencion;
foreach (CODIGO as COD) {
SELECT SUM(CASE WHEN E.puntoA_E = COD AND E.estado = 1 THEN E.valor ELSE 0 END) - SUM(CASE WHEN E.puntoA_E = COD AND E.estado = 2 THEN E.valor ELSE 0 END) + SUM(CASE WHEN R.puntoA = COD THEN R.valorRecaudo ELSE 0 END) AS total FROM tblenvios E,tblrecaudo R where E.puntoA_E=R.puntoA AND R.fecha ='2019-03-18' AND E.fecha ='2019-03-18' order by puntoA_E;
INSERT INTO tblsaldo(codigoPa,saldo,fecha) VALUES(COD,total,now())
end;
}
** foreach **, чтобы заставить меня понять, что яхочу сделать
I do not know how to make it query all the points A and insert the data in the tblsaldo table dynamically