
insertar campo en una tabla obtenido de otra php - mysql
#1
Posted 12 August 2013 - 08:34 AM
Agradezco desde ya su paciencia soy principiante aprendiendo (gracias a César).
Juro que antes de postear en el foro intenté de todas las formas que se me ocurrieron sin éxito.
Tengo una tabla con todos los codigos postales de México y necesito aumentar un campo con el ID del municipio (de otra tabla) algo que en excel resolvería con la funcion BUSCARV(valor a buscar, matriz, indicador de columna, ordenado) alguna sugerencia?
Bonito día!
#2
Posted 12 August 2013 - 09:14 AM
Puedes usar una consulta de actuialización para modificar el valor usando como identificador el id del código postal. Si tienes duda de cómo hacerlo en tu aplicación comparte un poco más de como está hecho para poder sugererirte soluciones.
Saludos.
#3
Posted 12 August 2013 - 09:43 AM
Mi tabla donde estan los municipios se llama mun y ésta es la estructura:
CREATE TABLE `mun` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`id_mun` int(11) NOT NULL,
`mun` varchar(250) COLLATE utf8_spanish_ci DEFAULT NULL,
`edo` varchar(250) COLLATE utf8_spanish_ci DEFAULT NULL,
`id_edo` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=2462 ;
Tengo otra tabla cpmexico (obtenida del servicio postal mexicano ) con ésta estructura:
Lo que necesito es insertar los valores del campo id de la tabla mun en el campo id_mun de la tabla cpmexico que corresponda de acuerdo al nombre del municipio (en el campo mun de la tabla mun y municipio de la tabla cpmexico)
CREATE TABLE `cpmexico` (
`id_cons` int(10) NOT NULL AUTO_INCREMENT,
`cp` int(5) unsigned zerofill NOT NULL,
`asenta` varchar(90) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`tipo_asenta` varchar(50) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`municipio` varchar(150) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`id_mun` int(11) DEFAULT NULL,
`estado` varchar(100) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`ciudad` varchar(150) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`id_CP` int(5) NOT NULL,
`id_estado` int(3) NOT NULL,
`id_oficina` int(5) NOT NULL,
`id_tipo_asenta` int(5) NOT NULL,
`id_municipio` int(3) NOT NULL,
`id_asenta_cpcons` int(8) NOT NULL,
`zona` varchar(40) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`id_ciudad` int(8) NOT NULL,
`c_CP` int(8) NOT NULL,
PRIMARY KEY (`id_cons`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6577 ;
Lo intententé con join, también intenté hacerlo con varias consultas y todo lo que se me ocurrio pero como te digo soy MUY principiante y estoy aprendiendo desde el concepto de tener paciencia.
Espero que la info sea útil y no esté muy cantinfleado mi planteamiento.
De antemano MIL GRACIAS!
#4
Posted 12 August 2013 - 03:16 PM

¿Lo que necesitas es actualizar el valor id_mun en cpmexico para todos aquellos registros que coinciden con mun?
de ser así puedes hacerlo de la siguiente manera:
Update cpmexico as mexico
inner join mun as municipio
on mexico.municipio = municipio.mun
set cpmexico.id_mun = municipio.id
Este artículo de mi blog puede ayudarte
http://elpoli.delphi...tencias-update/
#5
Posted 12 August 2013 - 05:27 PM
siyasé... los nombres de mis tablas y campos estaban del zorrillo y hasta yo me hice bolas... así es que te propongo un negocio:
ya las rebauticé para que los nombres de los campos queden igual en las dos tablas:
Tengo una tabla codigos (más de 140,000 registros) con un campo vacío que se llama id_municipio.
Quiero pasar a ese campo, los valores del campo id_municipio de mi otra tabla que se llama municipios (2500 registros).
El campo que tienen en común es municipio (asi se llama en las dos tablas) .
En síntesis, necesito actualizar el valor id_municipio en la tabla codigos (desde el campo id_municipio de la tabla muncipios) en todos aquellos registros que coincidan en municipio (mismo nombre del campo en ambas tablas)
¿Estuvo más claro?

#6
Posted 12 August 2013 - 06:27 PM
UPDATE codigos
INNER JOIN municipios
ON codigos.municipio = municipios.municipio
SET codigos.id_municipio = municipios.id_municipio
Después de un ratito apareció:
MySQL ha dicho: Documentación
#1205 - Lock wait timeout exceeded; try restarting transaction
¿es enorme mi tabla con 140,000 registros o qué sucede?

#7
Posted 12 August 2013 - 10:34 PM
MySQL ha dicho: Documentación
#1205 - Lock wait timeout exceeded; try restarting transaction
¿es enorme mi tabla con 140,000 registros o qué sucede?
140,000 registros no son muchos en realidad, puede ser que haya un bloqueo en tu tabla así que de ser posible podrías revisar las conexiones en tu servidor y verificar si existen bloqueos?,
Después te aconsejo que agregues un índice a cada tabla para el campo municipio
#8
Posted 13 August 2013 - 08:29 AM
#9
Posted 13 August 2013 - 08:37 AM
Nuevamente muchas gracias Poliburro!
¿Funcionó agregando el índice?
#10
Posted 13 August 2013 - 10:25 AM
Inicialmente me marcó el mismo error pero la siguiente vez que utilicé mi tabla como por arte de magia estaba actualizado el campo.
Mil gracias nuevamente
