Alguém sabe duplicar uma linha, alterar o id(auto_increment) dessa nova linha e atualizar com um Evento?

22/01/2019

0

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;
Igor

Igor

Responder

Post mais votado

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:
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.

Marcio Souza

Marcio Souza
Responder

Mais Posts

23/01/2019

Igor

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:
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
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar