![]() |
Copiar datos entre tablas Buenas a todos. Tengo un phpnuke montado y quiero banear a todos los usuarios registrados a la vez. Creo que copiando todos los nombres de los usuarios a la tabla de usuarios baneados podria hacerlo rapidamente. Estas son las tablas y los campos que tengo. Tengo por un lado la tabla nuke_users donde hay un campo llamado user_id . La tabla nuke_bbbanlist es la cual donde se almacenan los datos de los usuarios baneados el campo ban_userid . Resumiendo, quiero copiar TODOS los datos del campo user_id de la tabla nuke_users en el campo ban_userid . de la tabla nuke_bbbanlist . Entiendo que esta consulta se deberia de hacer desde la tabla nuke_users. Por cierto, lo voy a realizar a traves del phpmyadmin Gracias de antemano y disculpen por repetir el mensaje en el foro adecuado...:neurotico:neurotico |
Re: Copiar datos entre tablas Código: INSERT INTO nuke_bbbanlist (nuke_bbbanlist)Quim |
Re: Copiar datos entre tablas Pues despues de ejecutar el SQL en la tabla nuke_users, me devuelve este error: #1066 - Not unique table/alias: 'nuke_bbbanlist' A ver si alguien me puede decir donde esta el error. Gracias de antemano. Un saludo |
Re: Copiar datos entre tablas Quimfv te ha hecho el trabajo. Sucede que al pasarte los datos, en algún caso ha puesto como nombre de campos los nombres de tabla, pero cambialo y ya verás que funciona: Código: INSERT INTO nuke_bbbanlist (ban_userid) |
Re: Copiar datos entre tablas Gracias por la ayuda. He revisado el codigo con las modificaciones que ha puesto y me devuelve el mismo error. He intentando "traducir" el codigo y creo que esta correcto, pero me sigue devolviendo el mismo error. #1066 - Not unique table/alias: 'nuke_bbbanlist' Gracias de antemano. Un saludo |
Re: Copiar datos entre tablas He puesto un alias al segundo nuke_bbbanlist para tratar de evitar el problema. Pruébalo a ver si funciona ahora: Código: |
Re: Copiar datos entre tablas Pues gracias por la ayuda, pero me devuelve el siguiente error: #1093 - INSERT TABLE 'nuke_bbbanlist' isn't allowed in FROM table list No se donde puede estar el error. Gracias de antemano. |
Re: Copiar datos entre tablas No se puede indicar como tabla destino del INSERT la tabla origen de un SELECT ... FROM. El motor no puede resolver las PK, índices ni los triggers si al mismo tiempo estás leyendo e insertando sobre la misma tabla. Además entra en conflicto la concurrencia de las transacciones (bloqueas la tabla y al mismo tiempo la pretendés leer). |
Re: Copiar datos entre tablas Cita:
Un saludo |
Re: Copiar datos entre tablas Te conviene derivar la tarea a un Store Procedure y crear una tabla temporal con la estructura necesaria, luego hacer un volcado de los datos reunidos en la temporal a la definitiva. Todo el proceso debería ser muy rápido. |
Re: Copiar datos entre tablas gnzsoloyo, Lo que dices es clarificador y todos "nos aplicamos el cuento", pero me pregunto ¿por qué la consulta funcionó con una tabla MyISAM?, ¿se debió a que se trataba de una tabla de prueba con pocos datos o a que la naturaleza de esas tablas permite este tipo de cambios? Gracias |
Re: Copiar datos entre tablas Comienza desde el momento en que las tablas MyISAM no son relacionales y que además no existen en las MyISAM transacciones ni control de concurrencia... Lo de los índices tiene que verse desde el punto de vista de cómo los administra MyISAM. Las MyISAM y las InnoDB responden a modelos de datos diferentes. |
Re: Copiar datos entre tablas Ufff, pues me perdi hace varios mensajes. Lo siento, pero mis conocimientos de Mysql son nulos. Creia, con lo poco que me acordaba, de que haciendo un insert podria realizarse.... |
Re: Copiar datos entre tablas Con la sola condición de que -aclarado lo de las MyISAM- no intentes actualizar una tabla sobre sí misma. Si tienes que hacerlo por alguna razón, es mejor que generes una tabla temporal de transacción y la uses después para poner los datos en la origen al final del proceso. No creo que tengas problemas si lo haces así. Solamente hay que buscarle la vuelta con un poco de imaginación. |
Re: Copiar datos entre tablas Código: DROP TABLE IF EXISTS `forum`.`campanya`;Estoy haciendo un INSERT INTO a una tabla usandola en el select, la unica diferencia esta en el DISTICNT que lo he tenido que poner porque en mi caso idcampanya no era unico en la tabla de donde se sacan los datos (vendes)... No estamos indicando la misma tabla de destino y de origen, de origen usamos una consulta sobre esta tabla y otra, no hay conflicto!!! Bandit_S si nos pasas la definicion completa de las tablas quizas vemos algo. La solución de la tabla temporal si no es una oparación que vayas ha hacer habitualmente no es mala. Quim |
Re: Copiar datos entre tablas Gracias a todos por los mensajes, voy a poner la informacion que dispongo de las tablas: Tabla nuke_bbbanlist http://img528.imageshack.us/img528/3...listza3.th.jpg Tabla nuke_users http://img100.imageshack.us/img100/5...sersal6.th.jpg Espero que esto sea de ayuda. Un saludo |
Re: Copiar datos entre tablas El problema podria venir por el NOT NULL que tienes en ban_ip. Tienes que darle algun valor, no se si lo puedes sacar de alguna tabla, si no tendras que forzarlo a 0 o a un valor concreto. Código: no se que implicaciones a nivel de aplicación puede tener el hecho de forzar el valor de ese campo. Otro problema que veo es que hay diferencias en el formato de nuke_bbbanlist.ban_userid-->mediumint(8) nuke_users.user_id-->int(11) yo igualaria esos formatos, pero antes deberas revisar si ese cambio puede afectar a otras tablas, es decir tienes que mirar en todas las tablas que tengan el id de usuario y que todos tengan el mismo formato int(11). Por otro lado ban_userid puede estar repetido por lo que igual con la siguiente consulta tambien te funciona, pero luego ten claro que puedes tener usuarios baneados repetidos y que la ip que pongas tendria que ser nueva para assegurar que las parejas ip/iduser son unicas... Código: Quim |
| La zona horaria es GMT -6. Ahora son las 22:54. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.