Alguém sabe duplicar uma linha, alterar o id(auto_increment) dessa nova linha e atualizar com um Evento?
Uma pessoa pode ter varios registros, então queria pegar a ultima linha do registro de cada pessoa, duplicar e atualizar através de um Evento.
Ex: João tem os registros: 1,2,3,4,5 e Pedro tem os registros 6,7,8,9,10
Quero duplicar os registros 5 e 10 e atualiza-los com o evento, de forma que os registros anteriores fiquem intactos. É possivel?
-----PRIMEIRA TABELA
create table tbservidores(
nomeserv varchar(50) not null,
cpfserv varchar(30) primary key not null,
tiposerv varchar(30) not null,
total_xerox int,
maxcot int not null
) ENGINE = InnoDB;
------SEGUNDA TABELA
create table tbxerox(
xerox int not null auto_increment,
data_s timestamp default current_timestamp,
qtd_xerox int not null,
valor decimal(10,2) default null,
cpf varchar(30) not null,
restcota int,
primary key(xerox),
INDEX fk_tbxerox_tbservidores_idx(cpf ASC),
constraint fk_tbxerox_tbservidores foreign key(cpf) references tbservidores(cpfserv)
on delete no action
on update no action
) ENGINE = InnoDB;
-------SELECT INNER JOIN
select
X.xerox ,qtd_xerox,valor ,data_s,restcota,
S.nomeserv ,cpfserv ,tiposerv,maxcot,total_xerox
from tbxerox as X
inner join tbservidores as S
on (X.cpf = S.cpfserv);
------EVENTO COM ATUALIZAÇÃO
CREATE EVENT incrementar ON SCHEDULE EVERY 2 minute DO
UPDATE tbxerox
inner join tbservidores on tbxerox.cpf = tbservidores.cpfserv
SET maxcot = (tbxerox.restcota + 80),
total_xerox = (0),
qtd_xerox = (0)
WHERE (tbxerox.restcota) > 0
and tbservidores.tiposerv = 'Professor'
and xerox = +maximoXerox;
Ex: João tem os registros: 1,2,3,4,5 e Pedro tem os registros 6,7,8,9,10
Quero duplicar os registros 5 e 10 e atualiza-los com o evento, de forma que os registros anteriores fiquem intactos. É possivel?
-----PRIMEIRA TABELA
create table tbservidores(
nomeserv varchar(50) not null,
cpfserv varchar(30) primary key not null,
tiposerv varchar(30) not null,
total_xerox int,
maxcot int not null
) ENGINE = InnoDB;
------SEGUNDA TABELA
create table tbxerox(
xerox int not null auto_increment,
data_s timestamp default current_timestamp,
qtd_xerox int not null,
valor decimal(10,2) default null,
cpf varchar(30) not null,
restcota int,
primary key(xerox),
INDEX fk_tbxerox_tbservidores_idx(cpf ASC),
constraint fk_tbxerox_tbservidores foreign key(cpf) references tbservidores(cpfserv)
on delete no action
on update no action
) ENGINE = InnoDB;
-------SELECT INNER JOIN
select
X.xerox ,qtd_xerox,valor ,data_s,restcota,
S.nomeserv ,cpfserv ,tiposerv,maxcot,total_xerox
from tbxerox as X
inner join tbservidores as S
on (X.cpf = S.cpfserv);
------EVENTO COM ATUALIZAÇÃO
CREATE EVENT incrementar ON SCHEDULE EVERY 2 minute DO
UPDATE tbxerox
inner join tbservidores on tbxerox.cpf = tbservidores.cpfserv
SET maxcot = (tbxerox.restcota + 80),
total_xerox = (0),
qtd_xerox = (0)
WHERE (tbxerox.restcota) > 0
and tbservidores.tiposerv = 'Professor'
and xerox = +maximoXerox;
Igor
Curtidas 0
Melhor post
Marcio Souza
22/01/2019
Se for fazer isso a nível de aplicação, terá que criar uma consulta ao banco de dados que selecione apenas os registros de um usuário, ordene eles por id e pegue a linha do último id. Altere os dados desejados dessa linha, remova o id para que o banco possa incrementar um novo id e faça um insert.
Um exemplo para a consulta:
Assim, seu retorno será a linha do usuário com o maior id. Você vai poder alterar os dados dessa linha, remova o id inserindo null e faça um insert no banco.
Um exemplo para a consulta:
select * from tabela where id_usuario = 5 order by id_usuario desc limit 1;
Assim, seu retorno será a linha do usuário com o maior id. Você vai poder alterar os dados dessa linha, remova o id inserindo null e faça um insert no banco.
GOSTEI 1
Mais Respostas
Igor
22/01/2019
Se for fazer isso a nível de aplicação, terá que criar uma consulta ao banco de dados que selecione apenas os registros de um usuário, ordene eles por id e pegue a linha do último id. Altere os dados desejados dessa linha, remova o id para que o banco possa incrementar um novo id e faça um insert.
Um exemplo para a consulta:
Assim, seu retorno será a linha do usuário com o maior id. Você vai poder alterar os dados dessa linha, remova o id inserindo null e faça um insert no banco.
Um exemplo para a consulta:
select * from tabela where id_usuario = 5 order by id_usuario desc limit 1;
Assim, seu retorno será a linha do usuário com o maior id. Você vai poder alterar os dados dessa linha, remova o id inserindo null e faça um insert no banco.
Já está selecionando o último id de cada usuário. O evento na real mesmo é pra cada 30 dias atualizar a cota de cada usuário. Ou seja daqui a 30 dias o último registro de cada usuário deve está renovado.
Pensei no UPDATE em vez do INSERT porque vai atualizar apenas algumas colunas e pegar os dados da linha anterior, por isso pensei em duplicar. Se fosse INSERT teria que fazer pra cada usuário, colocando manualmente o nome
GOSTEI 0