Página 1 de 1
Reasignar mensajes de usuario
Publicado: 07 Nov 2012, 17:03
por aresoto
Hola a todos, tengo un problemilla
El otro día mientras un usuario cambiaba su mail de notificaciones y lo confirmaba (el usuario pasa a inactivo) tuve la mala suerte de hacer limpieza de usuarios inactivos, y ya os podéis imaginar que paso, que ese usuario se eliminó pero se mantienen los mensajes de este, mi pregunta es:
¿se puede reasignar los mensajes de un usuario eliminado a otro usuario? ¿como tendría que hacer?
Muchas gracias
Re: Reasignar mensajes de usuario
Publicado: 07 Nov 2012, 17:55
por Rainwod
No tienes ningún backup de tu base de datos???
Re: Reasignar mensajes de usuario
Publicado: 08 Nov 2012, 02:02
por towen
Podrías cargar el usuario y toda su información desde una copia de la base de datos sacando solamente a ese usuario. Lo otro que creo que podrías hacer, aunque no estoy seguro de que funcione correctamente, es crear un usuario nuevo, y desde la base de datos cambiarle el user_id por el del usuario antiguo, pero repito: no se si funcionaría.
Re: Reasignar mensajes de usuario
Publicado: 08 Nov 2012, 09:43
por aresoto
Si, tengo un backup de la bd, ya he probado a crear el usuario y volver a ponerle el ID que tenía en la tabla de user, pero no cambia nada, creo que cuando se borra el usuario todos los mensajes pasan al usuario con ID=1, el tema sería volver a ponerle todos los mensajes en el usuario correcto, lo que tambien mire es que los mensajes si que están lo único es que en las propiedades del usuario solo pone quien lo había publicado
Re: Reasignar mensajes de usuario
Publicado: 08 Nov 2012, 17:08
por Alorse
Hay dos maneras (tal vez más), una fácil y larga y otra un poco arriesgada y corta.
La fácil es ir a cada uno de los mensajes del usuario viejo y darle en Información, allí aparece la opción de Cambiar autor.
La otra arriesgada es hacer un UPDATE en la base de datos, primero hay que buscar el ID del usuario viejo y del usuario nuevo, y en el UPDATE actualizar todos los mensajes de la tabla phpbb_posts y phpbb_topics cuando el id_user sea igual al ID del usuario viejo.
Re: Reasignar mensajes de usuario
Publicado: 08 Nov 2012, 17:48
por aresoto
Ante todo muchas gracias por las respuestas.
La fácil ya la conozco, de echo empece a usarla pero se me ocurrió ver los mensajes que tenía el usuario y son cerca de 400 y uufffff me puedo echar un buen rato.
Voy a probar a hacer un update en la bd ya que conozco los dos user_id, obviamente lo voy a probar en una copia de la bd de pruebas.
Si lo consigo pongo las sentencias SQL.
Saludos y gracias
Re: Reasignar mensajes de usuario
Publicado: 09 Nov 2012, 12:48
por aresoto
Hola pues ya lo tengo solucionado, al final con varias querys, se podía hacer una única query pero así explico lo que hace cada una de ellas.
Requisitos
No haber borrado los mensajes del usuario cuando borramos al usuario por error.
Tenemos que saber el user_id del nunevo usuario
Código: Seleccionar todo
SELECT * FROM BaseDeDatos.phpbb_users where username='ponemos el nombre del usuario nuevo';
Mi resultado para el username='pepe' fue el user_id=55 estos son datos ficticios cada uno tiene unos diferentes.
Cambiamos los topics del usuario que se eliminó (PEPE, este es el usuario que se eliminó, pero como observáis está en mayúsculas)
Esto hace lo siguiente, cambia los
topic_poster al valor 55(user_id actual) cuando coincida con el usuario que fue eliminiado (PEPE)
Código: Seleccionar todo
update BaseDeDatos.phpbb_topics set topic_poster='55' where topic_first_poster_name='PEPE';
Esto hace lo siguiente, cambia los
topic_last_poster_id al valor 55 cuando coincida con el usuario PEPE
Código: Seleccionar todo
update BaseDeDatos.phpbb_topics set topic_last_poster_id='55' where topic_last_poster_name='PEPE';
_______________________________________________
Buscamos todas las respuesta de nuestro usuario
Código: Seleccionar todo
SELECT * FROM BaseDeDatos.phpbb_posts where post_username='PEPE';
Esto nos devuelve todos los mensajes del usuario que fue eliminado
el campo que tenemos que cambiar es
poster_id y poner en blanco
post_username
Código: Seleccionar todo
update BaseDeDatos.phpbb_posts set poster_id='55' where post_username='PEPE';
Código: Seleccionar todo
update BaseDeDatos.phpbb_posts set post_username='' where post_username='PEPE';
______________________________________________
Actualizamos el numero de mensajes que tiene el usuario
Para ello tenemos que saber cuentos mensajes tiene el usuario
Código: Seleccionar todo
SELECT * FROM BaseDeDatos.phpbb_posts where post_username='pepe';
Una vez sepamos los mensajes que tiene ejecutamos lo siguiente
Código: Seleccionar todo
update BaseDeDatos.phpbb_users set user_posts='numero de mensajes en total' where user_id='55';
Re: Reasignar mensajes de usuario
Publicado: 09 Nov 2012, 13:00
por towen
Muy detallada tu guía aresoto, gracias por compartirla. Algo que mencionar, creo que sería también muy bueno que incluyeras como cambiar también los mensajes privados, los pasos son similares solo que en otra tabla. SAlu2
Re: Reasignar mensajes de usuario
Publicado: 09 Nov 2012, 13:09
por aresoto
Ok miro de hacerlo y lo completo
Re: Reasignar mensajes de usuario
Publicado: 09 Nov 2012, 13:53
por Alorse
Me alegra que lo halla podido hacer, solo comentar que es mejor que hubieras seguido trabajando con el user_id y no con el nombre de usuario ya que puede dar problemas, algo así:
Código: Seleccionar todo
UPDATE phpbb_posts SET poster_id = 'X' WHERE poster_id = 'Y';
Y también hay que recordar que hay que actualizar la tabla de temas que no lo vi en el mensaje anterior:
Código: Seleccionar todo
UPDATE phpbb_topics SET topic_poster = 'X' WHERE topic_poster = 'Y';
Cuando X es el ID del usuario nuevo y Y del antiguo.
El resto se puede hacer desde el ACP haciendo reconteo de mensajes.
Re: Reasignar mensajes de usuario
Publicado: 09 Nov 2012, 16:46
por aresoto
Alorse escribió:Me alegra que lo halla podido hacer, solo comentar que es mejor que hubieras seguido trabajando con el user_id y no con el nombre de usuario ya que puede dar problemas, algo así:
Código: Seleccionar todo
UPDATE phpbb_posts SET poster_id = 'X' WHERE poster_id = 'Y';
Y también hay que recordar que hay que actualizar la tabla de temas que no lo vi en el mensaje anterior:
Código: Seleccionar todo
UPDATE phpbb_topics SET topic_poster = 'X' WHERE topic_poster = 'Y';
Cuando X es el ID del usuario nuevo y Y del antiguo.
El resto se puede hacer desde el ACP haciendo reconteo de mensajes.
Gracias Alorse, eso esta mas claro pero tengo una duda:
Las querys que pones ¿no es para cambiar un id por otro? al borrar el usuario todos sus mensajes pasan al id 1 que es el Anónimo por eso utilice el nombre.
Si tienes un backup y restauras solo la parte que te interesa (la parte del usuario que se borro) de la tabla post y topic es perfecto las query que pones, de lo contrario tendrías que usar el nombre. ¿creo? espero confirmación.
Sin embargo los mensajes privados no se pueden recuperar sino tienes el backup ya que se eliminan al borrar el usario.

Re: Reasignar mensajes de usuario
Publicado: 09 Nov 2012, 17:57
por Alorse
aresoto escribió:Las querys que pones ¿no es para cambiar un id por otro?
Exactamente.
aresoto escribió:al borrar el usuario todos sus mensajes pasan al id 1 que es el Anónimo por eso utilice el nombre.
Esto no lo sabia, creí quedaban con el mismo ID, pero entonces si toca hacerlo como tú dices.