Создать событие mysql, которое проверяет записи таблицы и для каждой записи, которая добавляет и вычитает значения и вставляет их в другую? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь провести мероприятие, которое проводится каждый день в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...