Buenas a todos!
Necesito duplicar cada registro de una tabla modificando solo dos datos y el resto identicos al registro duplicado, hay alguna manera autómatica de hacerlo? estoy trabajando desde Navicat. Muchas gracias!!!
| |||
insercción automática de registros en navicat Buenas a todos! Necesito duplicar cada registro de una tabla modificando solo dos datos y el resto identicos al registro duplicado, hay alguna manera autómatica de hacerlo? estoy trabajando desde Navicat. Muchas gracias!!! |
| |||
Respuesta: insercción automática de registros en navicat He encontrado algo: Cita: pero el problema es que me duplica el id, se lo he quitado de la select ya que es autoincrementable, pero no lo reconoce, necesita un valor para insertar.... INSERT INTO dns_recs SELECT dns_zone_id, 'MX', 'server', 'server', displayVal, val, '20', time_stamp FROM dns_recs_2 WHERE opt='10' and type='MX' Última edición por auri501; 01/06/2009 a las 03:27 |
| |||
Respuesta: insercción automática de registros en navicat Esto sería una solución, lo que intento hacer es sumarle 1 al ultimo id de la tabla....., pero no sé como hacerlo directamente en mysql en navicat.... Cita: INSERT INTO dns_recs SELECT id+1, dns_zone_id, type, displayHost, host, 'server', 'server', '20', time_stamp FROM dns_recs WHERE opt='10' and type='MX' |
| |||
Respuesta: insercción automática de registros en navicat Hola gnzsoloyo, gracias por tu respuesta. Me explico mejor, tenemos una tabla que contiene registros de configuraciones, y necesitamos agregar una configuración especial que consiste en la duplicidad de unos registros ya existentes en esa tabla pero variando el valor de dos campos. Realmente no quisiera modificar la pk de ningún campo ya existente, sino darle la suya propia al nuevo registro insertado, pero de la manera que lo tengo creado me inserta el id del producto que quiero duplicar. |
| ||||
Respuesta: insercción automática de registros en navicat Bien,analicemos lo que describes: La tabla en cuestión contiene configuraciones de equipos datos, es decir: la tabla controla un producto y configuración, pero esta configuración tien o bien componentes opcionales, o bien configuraciones alternativas. ¿Es así?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: insercción automática de registros en navicat No entiendo muy bien a que te refieres con componentes opcionales o configuraciones alternativas... te explico un poco más sobre la estructura de mi bdd. Todos los campos de la tabla deben tener datos y son configuraciones de dns de todos los dominios de un servidor bajo plesk... estamos viendo la manera de hacerlo sin tener que cambiar uno a uno este registro desde el panel plesk. mi tabla contiene los siguientes campos: id,dns_zone_id,type,displayHost,host,val,displayVa l,op,time_stamp y necesito duplicar solo unos datos, los que cumplan la siguiente condicion: WHERE opt='10' and type='MX' y cambiar el valor de los campos val,displayVal,opt de los registros duplicados... creo que es factible hacerlo ya que realmente no es una duplicidad en si, es una insercción de un nuevo registro.... muchas gracias por tu interes!!! |
| ||||
Respuesta: insercción automática de registros en navicat Queda un poco más claro el problema. Entonces la cosa es así: - Tienes una tabla de datos que contiene información de dominios con este contenido (aproximadamente): Cita: .DOMINIO_PLESK(id, dns_zone_id, type, displayHost, host, val, displayVa l, op, time_stamp) - Quieres cambiar tres valores solamente (val, displayVa l, op), pero sin perder los datos que ya existen. - El ID es numérico, lo que implica que lo han declarado o como auto_increment, o lo pone el sistema. En cualquiera de los dos casos el problema es que existe al menos un conjunto de datos de la tabla que no deben repetirse, ya que son determinantes de la identidad de la instancia (supongamos: dns_zone_id, type, displayHost, host, time_stamp). - En estas condiciones, cualquier duplicidad de datos en esos tres campos producirá una violación de la normalización de la tabla (1FN). Lo que se debe hacer, si se quiere evitar problemas de consistencia, es enviar esos tres valores a una tabla independiente, ponerle clave propia y en la tabla principal poner un campo FK referido a ese registro de la segunda tabla. Esto permitiría con un sólo SELECT con INNER JOIN obtener todos los registros de cada dominio y host, que tengan más de un conjunto de valores en esos tres campos. SI lo que se desea es reemplazar sin conservar, el asunto es hacer un UPDATE, no un INSERT. ¿Se comprende la idea? ¿Me estoy acercando a lo que preguntas?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
![]() Muchas gracias de nuevo por tu rapida respuesta gnzsoloyo. Es eso exactamente lo que quiero hacer, lo has entendido a la perfeccion, el problema es que no podemos alterar la estructura de las tablas porque es una aplicación externa a nosotros... solo podemos cambiar los datos de las tablas. El propio programa al crear un nuevo registro, lo crea de esa manera, duplica los datos generando un nuevo registro modificando solo esos tres campos que yo necesito cambiar, por lo que entiendo que aunque no sea correcto al estar así estructurada la bdd pues no podemos hacer otra cosa que duplicar el registro. Lo que necesitaria es hacer la select que he puesto al principio pero me da el error de la pk. La solución seria sumar 1 a la última pk, pero no sé como hacer eso..... No sé si me he explicado, es un poco complicado explicar por aquí ya que no es una bdd que pueda modificar a mi antojo... muchas gracias por todo. |
| ||||
Respuesta: insercción automática de registros en navicat Cita: Si la PK se está poniendo automáticamente, no es posible sin tener control del INFORMATION_SCHEMA.TABLES. Si quieres mantener ese esquema, la única posibilidad es hacerlo en dos etapas. La solución seria sumar 1 a la última pk, pero no sé como hacer eso..... 1) Tienes que recuperar el valor del máximo ID de la tabla en el campo:
Código SQL:
.Ver original 2) Una vez recuperado el conjunto del registro, usar ese valor de l campo `auto_increment` sumandole 1, y enviar el registro completo (incluyendo el ID). Si intentas enviar el mismo ID del registro original sumando 1, eso funcionará solamente si ese registro es el último ingresado. Sino, siempre habrá uno posterior y lo estarías pisando. Aún con todo esto, ten en cuenta que es muy posible que esto te genere a la alarga problemas de consistencia, si el ID de la tabla se usa como FK en alguna parte del sistema... Y a medida que se vayan agregando, es posible que algunas consultas en funcionamiento en la actualidad, colapsen sin remedio. Esto es sólo un "parche". Tienen que reforma si o si el sistema o eventualmente no funcionará.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: insercción automática de registros en navicat El sistema es plesk, no sé si has oido hablar de él... es un panel de control para gestionar las configuraciones de los servidores. No tenemos acceso al codigo fuente de plesk ya que es un programa privado, solo tenemos acceso al contenido de la bdd y hemos visto que al crear desde su panel de control una nueva dns crea este tipo de registro en esta tabla, es por eso que lo vamos a hacer así, y funciona perfectamente. El código que me has pasado: Cita: me viene genial para el valor que necesito, pero no sé como incluirlo en la select que tengo creada: SELECT `auto_increment` FROM information_schema.`TABLES` T WHERE TABLE_NAME = 'NOMBRE_TABLA'; Cita: INSERT INTO dns_recs SELECT (valor de la select anterior), dns_zone_id, type, displayHost, host, 'server', 'server', '20', time_stamp FROM dns_recs WHERE opt='10' and type='MX' y como puedo usar dos select en mi consulta?? porque necesito esta para el id, pero también necesito la otra para los valores de mi nuevo registro: Código PHP: |
| ||||
Respuesta: insercción automática de registros en navicat Una forma muy rústica de hacerlo sería:
Código sql:
Esta forma lo que hace es conservar el registro anterior y crear uno nuevo. No me queda claro para qué quieres una doble consulta, que por otro lado a nivel de SQL no es posible en el contexto de un INSERT. Ver original
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
Respuesta: insercción automática de registros en navicat He creado este insert: Cita: pero la segunda select que recoge el último id insertado parece que siempre me coge el mismo porque me aparece el error "Duplicate entry '526' for key 1", he intentado: SELECT auto_increment + 1 pero como siempre recoge el mismo valor tampoco funciona...... INSERT INTO dns_recs SELECT ( SELECT auto_increment FROM information_schema.`TABLES` T WHERE TABLE_NAME = 'dns_recs'), dns_zone_id, type, displayHost, host, 'server', 'server', '20', time_stamp FROM dns_recs WHERE opt='10' AND type='MX'; |
| ||||
Respuesta: insercción automática de registros en navicat No te deja ingresarlo, porque esto:
Código sql:
te devuelve el último ID que ya se usó.Ver original Por eso la sintaxis que usé era:
Código sql:
Ahora bien, -este método sólo sirve para ingresar un registro, no para ingresar varios al mismo tiempo. Al menos no o he probado para eso.Ver original Si quieres otro método que te puede ingresar varios, entonces hay que plantear el asunto de otra forma. ¿Cómo harás las inserciones?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |