php - Apagar um registro após fazer uma consulta? - Stack Overflow em Português
Apagar um registro após fazer uma consulta?
Existe como após uma consulta apagar o resultado retornado de um banco?
Tenho uma tabela mensagem (de,para,mensagem) cada vez que consulto devo apagar a(s) mensagem(s) lidas.
perguntada 2/12/14 às 22:56
Imagino que você procure um modo automático, porque usando os mesmos critérios do SELECT num DELETE você apagará a consulta recém feita...
3/12/14 às 0:06
O select pode garantir que os dados foram extraídos, não lidos , informação poderia ser perdida, uma solução poderia ser (depende da aplicação) , ler os dados mais recentes e um EVENT apaga os registros anteriores a um tempo X. Mas direto e numa única operacão não me ocorre.
3/12/14 às 0:55
Sim, só que o problema é que posso ter inserções durante a consulta. E quando eu for deletar * tem novos registros não lidos
Talvez se eu armazenasse os id dos objetos consultados e fizesse o delete depois.
3/12/14 às 0:59
Seria mais fácil com um campo de status (lida ou não) para a mensagem. Imagino que tenhas esse campo, mas poste a estrutura da tabela para dar uma visão geral melhor sobre a questão.
3/12/14 às 2:45
Você pode criar um Stored Procedure no seu banco de dados. Veja um exemplo:
USE `database`$$
DROP PROCEDURE IF EXISTS `consultaMensagem`$$
CREATE PROCEDURE `consultaMensagem`(IN idMensagem INT)
SELECT * FROM mensagem WHERE id = idMensagem;
DELETE FROM mensagem WHERE id = idMensagem;
database -> seu banco de dados consultaMensagem -> nome da sua procedure idMensagem -> parâmetro de entrada para a consulta e exclusão
Entre BEGIN e END você desenvolve sua procedure, no caso esta executa uma consulta no banco de dados filtrando todos os registro que possuem o id = idMensagem (parâmetro passado à procedure). Em seguida, com o mesmo filtro, executa um DELETE, eliminando assim a mensagem consultada.
Para executar a procedure, faça desta maneira:
Call consultaMensagem(1);
Assim, a mensagem com id = 1 será retornada e eliminada logo em seguida.
respondida 3/12/14 às 9:25
1.9481111 medalhas de prata1717 medalhas de bronze
Na verdade como não sei se tem mensagem ou não, meu select é assim SELECT * FROM MENSAGEM WHERE para=para
3/12/14 às 11:26
Sem problemas @Thiago, basta alterar o WHERE do SELECT e do DELETE
3/12/14 às 16:06
criei conforme seu exemplo, mas ela esta deletando todas as mensagens em vez de deletar apenas do usuário passado pelo parâmetro: CREATE DEFINER='root'@'localhost' PROCEDURE 'consultaMensagem'(IN idpara INT) BEGIN SELECT * FROM mensagens WHERE idpara = idpara; DELETE FROM mensagens WHERE idpara = idpara; END
3/12/14 às 21:33
Fiz um teste aqui @Thiago e pelo que percebi quando o nome do campo e o parâmetro que ele recebe possui o mesmo nome, ele se perde e acaba exibindo e, consequentemente, removendo tudo. Tenta alterar o nome do seu parâmetro de entrada de idpara para idReceptor, por exemplo.