Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Cambiar parte de una entrada con comando

Estas en el tema de Cambiar parte de una entrada con comando en el foro de Mysql en Foros del Web. Hola, Desafortunadamente tengo muy poco conocimientos de ésta materia que es el trabajar con bases de datos mysql. Es por eso que recurro a este ...
  #1 (permalink)  
Antiguo 27/02/2010, 15:58
Avatar de Willy_N  
Fecha de Ingreso: diciembre-2009
Ubicación: Cádiz
Mensajes: 334
Antigüedad: 14 años, 11 meses
Puntos: 18
Cambiar parte de una entrada con comando

Hola,

Desafortunadamente tengo muy poco conocimientos de ésta materia que es el trabajar con bases de datos mysql. Es por eso que recurro a este foro, porque no me apatece mucho cargarme la base de datos por desconocimiento.

Tengo un foro phpBB2 que actualmente se encuentra en una carpeta llamada /phpBB2/.

Quiero cambiar esa carpeta a /foros/. Hasta ahí llego, pero, en la base de datos se encuentran muchos urls que son como http://www.mi-dominio.com/phpBB2/varios_nombres.php

Quiero usar una consulta (comando?) para que en todas los urls se cambia phpBB2 por foros.

O sea, necesito encontrar una parte de las entradas y cambiarlas por otra.

¿Sería algo como?
Código SQL:
Ver original
  1. SELECT REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros');

¿Funcionará a pesar de referirse solamente a una parte de las urls?
  #2 (permalink)  
Antiguo 27/02/2010, 16:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Cambiar parte de una entrada con comando

Código MySQL:
Ver original
  1. SELECT REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros') Texto_Cambiado;
  2. +---------------------------+
  3. | Texto_Cambiado            |
  4. +---------------------------+
  5. | www.mi-dominio.com/foros/ |
  6. +---------------------------+

¿Alguna duda?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/02/2010, 17:08
Avatar de Willy_N  
Fecha de Ingreso: diciembre-2009
Ubicación: Cádiz
Mensajes: 334
Antigüedad: 14 años, 11 meses
Puntos: 18
Respuesta: Cambiar parte de una entrada con comando

Pues si, dos para ser preciso,

¿Para qué sirve ese Texto_Cambiado al final?

¿Y por qué me da este error?
Código SQL:
Ver original
  1. You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'LIMIT 0, 30' at line 1
  2.  
  3. Error de ejecución:
  4. SELECT REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros'); LIMIT 0, 30;
  #4 (permalink)  
Antiguo 27/02/2010, 17:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Cambiar parte de una entrada con comando

Cita:
¿Para qué sirve ese Texto_Cambiado al final?
Eso es un ALIAS. Se usan para suplantar los nombres de los campos sel SELECT por cuestiones prácticas, o bien los nombres de bases, tablas o campos, para simplificar su invocación.
No se pueden invocar campos por sus alias en el WHERE.
Aparece en todos los DBMS y en todos los manuales de SQL. Es parte del ANSI SQL.
De no ponerlo, el resultado sería:
Código MySQL:
Ver original
  1. SELECT REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros');
  2. +----------------------------------------------------------+
  3. | REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros') |
  4. +----------------------------------------------------------+
  5. | www.mi-dominio.com/foros/                                |
  6. +----------------------------------------------------------+
¿Cómo haces para usar una columna cuyo nombre tiene ese encabezado?
Al leerla en algunos lenguajes, no podrías invocarla por nombre.


Cita:
¿Y por qué me da este error?
Porque estás poniendo un punto y coma que no corresponde luego del alias. En MySQL los ";" cierran la sentencia.
Además, estás usando la cláusula LIMIT, sin estar leyendo una tabla, lo que no tienen ningún sentido ni utilidad.
La cláusula LIMIT, que no es obligatoria, se usa para limitar la cantidad de registros a devolver, y sólo tiene lógica usarla cuando se va a aleer una tabla extensa, o cuando se quiere un número de resultados limitado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 27/02/2010 a las 17:48
  #5 (permalink)  
Antiguo 27/02/2010, 18:18
Avatar de Willy_N  
Fecha de Ingreso: diciembre-2009
Ubicación: Cádiz
Mensajes: 334
Antigüedad: 14 años, 11 meses
Puntos: 18
Respuesta: Cambiar parte de una entrada con comando

Gracias por tus explicaciones,

Ese LIMIT 0, 30 no lo puse yo, apareció en el mensaje de resultado en la aplicación que suelo usar para trabajar con mi base de datos después de ejecutar lo que tu me pusiste:
Código SQL:
Ver original
  1. SELECT REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros') Texto_Cambiado;
Ahora he intentado ejecutar lo mismo en phpMyAdmin y no me pone ese LIMIT 0, 30 al final después de ejecutar.
Pero, tanto
Código SQL:
Ver original
  1. SELECT REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros') Texto_Cambiado;
como
Código SQL:
Ver original
  1. SELECT REPLACE('www.mi-dominio.com/phpBB2/', 'phpBB2', 'foros') Texto_Cambiado
como
Código SQL:
Ver original
  1. SELECT REPLACE('%www.mi-dominio.com/phpBB2/%', 'phpBB2', 'foros') Texto_Cambiado;
no hace nada, se ejecuta en 0,0001 segundos pero no produce el cambio deseado, no hace nada.

¿Estoy haciendo algo mal?
  #6 (permalink)  
Antiguo 27/02/2010, 19:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Cambiar parte de una entrada con comando

Puede que algún problema con la versión de PhpMyAdmin, o con la de MySQL, ya que si hago lo mismo que tu en un servidor de prueba (cortesía de www.phpmyadmin.net), el resultado es:


Como puedes ver, sí se ejecuta en PhpMyAdmin...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 28/02/2010, 02:56
Avatar de Willy_N  
Fecha de Ingreso: diciembre-2009
Ubicación: Cádiz
Mensajes: 334
Antigüedad: 14 años, 11 meses
Puntos: 18
Respuesta: Cambiar parte de una entrada con comando

Es lo mismo que veo yo después de ejecutarlo, pero no cambia nada.
Si busco por el texto que quiero cambiar antes y después de ejecutar obtengo el mismo nº de entradas, y para el nuevo texto ninguna...
  #8 (permalink)  
Antiguo 28/02/2010, 04:43
Avatar de Willy_N  
Fecha de Ingreso: diciembre-2009
Ubicación: Cádiz
Mensajes: 334
Antigüedad: 14 años, 11 meses
Puntos: 18
Respuesta: Cambiar parte de una entrada con comando

Usando
Código SQL:
Ver original
  1. UPDATE TABLE_NAME SET column_name = REPLACE(column_name,"find_this","replace_with_this");
si consigo hacer el replace, pero claro, con este comando tengo que hacerlo tabla por tabla y columna por columna..

¿Hay una forma de cambiar el comando de tal modo que se ejecuta sobre toda la BD del tirón?

* EDIT *

He usado este comando para las tres tablas que tenían muchas cientos de entradas para cambiar y las demás entradas las he ido cambiando de uno en uno a mano. Tampoco ha costado tanto trabajo, en cuestión de 10 minutos he podido cambiar unas tres mil entradas.

O sea, ya está hecho.

Ahora solamente me quedo con la duda de por qué el SELECT REPLACE no funcionó.
Probablemente nunca lo sabré, a no ser que alguien arroja luz sobre el misterio.

Última edición por Willy_N; 28/02/2010 a las 06:30
  #9 (permalink)  
Antiguo 28/02/2010, 08:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Cambiar parte de una entrada con comando

Cita:
¿Hay una forma de cambiar el comando de tal modo que se ejecuta sobre toda la BD del tirón?
No, porque el algoritmo para generar una consulta que realice una iteración sobre N tablas y N campos (no nos olvidemos que se trata de valores indefinidos), sobre una base o bases indeterminadas, sería demasiado complicado e inseguro, porque eventualmente podría realizar cambios sobre campos en los que no se desea cambiar.
¿Se entiende la idea?

La solución que realizaste es, en definitiva, el camino más corto siempre...


Cita:
Ahora solamente me quedo con la duda de por qué el SELECT REPLACE no funcionó.
Probablemente nunca lo sabré, a no ser que alguien arroja luz sobre el misterio.
Bueno, el misterio lo resuelve nuevamente el manual, que dice:
Cita:
Actualmente, no puede reemplzar en una tabla y seleccionar de la misma en una subconsulta.
Es decir, no funciona, simplemente.
A menos que me equivoque, el problema estaría en el bloqueo de escritura que pone el INSERT y que es el mismo que pone el REPLACE. Entre otras cosas, porque no se espera que se intente reemplazar consigo mismo, ya que para ello existe el UPDATE.
Posiblemente sea uno de los temas pendiente de desarrollo en el proyecto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 28/02/2010, 10:20
Avatar de Willy_N  
Fecha de Ingreso: diciembre-2009
Ubicación: Cádiz
Mensajes: 334
Antigüedad: 14 años, 11 meses
Puntos: 18
Respuesta: Cambiar parte de una entrada con comando

Muchas gracias por las aclaraciones, ha quedado todo bien claro, y además bien resuelto.

Me has dado una buena idea, voy a ver si encuentro el manual de phpMyAdmin para ver si así aprendo algo... Porque supongo que es en ese manual donde encontraste la respuesta al misterio, ¿no?

Acabo de dar por terminado toda la mudanza de una carpeta a otra de todo mi foro.

Un saludo.

Etiquetas: comando, entrada
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.