Foros aprenderaprogramar.com
Aprender a programar => De todo un poco... => Mensaje iniciado por: jockim en 11 de Abril 2013, 11:18
-
Hola tengo una columna denominada ordering en una tabla mysql con unos 500 registros. Quiero cambiar los valores de esa columna por los valores que tengo en una columna en un archivo excel, ya he probado de varias maneras pero no logro hacerlo. Ayuda por favor!!
-
Para reemplazar un texto por otro debes usar esto:
UPDATE <nombre_de_la_tabla> SET <nombre_de_la_columna> = REPLACE (<nombre_de_la_columna>, "<texto_a_buscar>", "<texto_a_reemplazar>");
Por ejemplo:
UPDATE jos_content SET city = REPLACE (city, "Venezia", "Venecia");
-
gracias pero lo que has dicho es para reemplazar determinado texto por otro, yo lo que necesito no es reemplazar un texto sino toda una columna
-
Si se quiere que toda una columna tenga un mismo contenido se puede usar la siguiente instrucción:
UPDATE <nombre_de_la_tabla> SET <nombre_de_la_columna> = valor
Por ejemplo UPDATE productos SET precio = 32.50 haría que todos los precios se pusieran con valor 32.50
UPDATE personas SET bloqueado = 'No' haría que todas las personas se pusieran con un contenido de bloqueado que sería "No"
Hay que tener cuidado con esto porque si haces esto pierdes todos los datos que tuvieras en la columna!!!
-
pero eso no es lo que quiero, eso haría que todas las filas tuvieran el mismo valor en esa columna y yo tengo que tener un valor diferente en cada columna
-
¿Puedes poner un ejemplo de lo que quieres hacer con datos de ejemplo?
-
Sería esto:
Situación de partida en la tabla jos_sobi2_item en la base de datos MySql:
id name size ordering
1 Pedro 178 47
2 Juan 9845 23
6 Pedro 7633 3
9 Manuel 6321 55
Situación de partida en el archivo excel
id strate ordering
1 up 5
2 down 88
6 down 143
9 up 8
Imagínate que en vez de 4 sean 500 filas, yo lo que quiero es que los ordering que están en el excel sean los que queden en la base de datos
-
Me va quedando claro, cada id de la primera tabla tiene que quedar con el valor de ordering de la segunda tabla, pero ¿qué hay que hacer con el campo strate que aparece en la segunda tabla?
-
El campo strate no tiene importancia, está ahí porque viene ahí pero en realidad no interviene para nada, se le puede ignorar
-
Te voy a ir diciendo los pasos a seguir:
En primer lugar, exporta la tabla que vas a modificar que suponemos se llama mos_tobi2_item y guárdala a modo de backup de seguridad.
En segundo lugar, crea una tabla auxiliar en la base de datos a la que vamos a denominar auxiliar_borrar.
En tercer lugar crea un archivo de excel donde solo tengas los campos que te interesan, en este caso id y ordering (es decir, borra el campo strate que no te interesa). Guarda el archivo excel con el nombre datosLimpios.csv como archivo csv delimitado por comas. Para ello vete en excel a guardar como y en el formato de archivo escoge csv delimitado por comas. Luego importas el archivo datosLimpios.csv a la tabla auxiliar_borrar de la base de datos. Comprueba que en la tabla auxiliar_borrar tengas todo correcto.
Avísame si llegas hasta aquí.
-
ya está hecho lo que has dicho ;D
-
Ok ahora tenemos resumiendo:
Tabla que vamos a modificar: mos_tobi2_item con un campo de referencia itemid y un campo a modificar ordering.
Campo que vamos a modificar de esa tabla: ordering
Tenemos una tabla auxiliar (auxiliar_borrar) donde tenemos los itemid y los valores de ordering nuevos correspondientes a cada itemid.
Hacemos esta consulta:
UPDATE `mos_tobi2_item` JOIN `auxiliar_borrar` on `mos_tobi2_item`.`itemid` = `auxiliar_borrar`.`itemid` SET `mos_tobi2_item`.`ordering`=`auxiliar_borrar`.`ordering` WHERE `mos_tobi2_item`.`itemid`=`auxiliar_borrar`.`itemid`;
Aquí lo que decimos es: actualiza la tabla unión de mos_tobi2_item con la tabla auxiliar_borrar de modo que el campo ordering de mos_tobi2_item se cambie por el campo ordering de auxiliar_borrar siempre que el campo itemid de la tabla mos_tobi2_item sea igual que el campo itemid de la tabla auxiliar_borrar.
Aunque actuamos sobre una tabla intermedia (la unión de 2 tablas) estamos modificando un campo específico y ese cambio quedará reflejado en la tabla mos_tobi2_item, es decir, es un cambio definitivo.
Revísalo primero y si lo ves bien pruébalo
-
¿Por qué me dices que lo revise y que si lo veo bien?
-
simplemente que tengas cuidado porque si te equivocas puedes perder los datos de la base de datos. Si tienes una copia de seguridad y te equivocas puedes recuperar los datos a traves de la copia de seguridad, simplemente eso
-
Ha funcionado perfectamente!!! Gracias!!!
-
Bueno faltaría una cosa para dejar la base de datos limpia borra la tabla auxiliar_borrar
-
gracias
-
hola he visto lo que han comentadoy esta muy bueno, pero cuando importo los datos de excell no me slen todos los datos del campo, emplo
id nombre_product
1 aluminio 30x 25
2 aluminio 10 x 25
al importar me sale:
id nombre_product
1 aluminio 30
2 aluminio 10
no muestra completo el texto del campo, os agradezco por la colaboracion
-
Hola ferney ¿puedes poner un enlace desde donde se pueda descargar el archivo de excel con los datos?
Pienso que el problema puede estar en el archivo de excel, por ejemplo que al crear el archivo csv no se estén guardando correctamente los datos
Saludos!