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

Expresión Regular amigable

Estas en el tema de Expresión Regular amigable en el foro de Mysql en Foros del Web. Hola buenas, Quisiera saber como puedo hacer esto con MySql en mi base de datos tengo un campo title, con el siguiente contenido: "Soy un ...
  #1 (permalink)  
Antiguo 25/05/2012, 06:40
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Expresión Regular amigable

Hola buenas,

Quisiera saber como puedo hacer esto con MySql

en mi base de datos tengo un campo title, con el siguiente contenido:

"Soy un título 1"

Y yo quiero que salga con un SELECT replace

"soy-un-titulo-1"

Estoy probando con:

Código MySQL:
Ver original
  1. SELECT REPLACE(title, title REGEXP '[`a-z]', '-') FROM table
Pero no se como se usa....

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #2 (permalink)  
Antiguo 25/05/2012, 07:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Expresión Regular amigable

No te compliques

replace([nombre_campo],'[cadena_a_encontrar]','[cadena_sustituta]');

Código MySQL:
Ver original
  1. SELECT LOWER(REPLACE(title, " ", "-")) FROM table

Aquí tienes tanto REPLACE() como LOWER().

Y aquí la expresiones regulares, si las vas a necesitar para los tildes. (no me habia fijado)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 25/05/2012 a las 07:22
  #3 (permalink)  
Antiguo 25/05/2012, 07:29
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Expresión Regular amigable

El problema esta en que no solo están las tildes... si no que pueden haber otros símbolos...

como &, !!, etc

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #4 (permalink)  
Antiguo 26/05/2012, 13:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Expresión Regular amigable

Pero lo mejor sería que crearas una función con programación en PHP que quitara todos los signos, cambiara mayúsculas por minúsculas, las vocales con tilde por vocales sin tilde, la ñ por n, e hiciera desaparcer todo signo que no fuera alfabético. Y que cargases eso en un campo y cada vez que modificases el campo, se aplicara la función para ese campo, y la volviese a modificar. Sé que existen funciones como esas en la red y las he visto ahora no recuerdo dónde. Pide ayuda en el foro de PHP.
  #5 (permalink)  
Antiguo 26/05/2012, 15:48
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Expresión Regular amigable

Hola buenas,

Lo que comentas esta bien, pero no me gusta mantener dos campos en la base de datos para lo mismo si se puede solucionar de otra manera. Al menos intentarlo.. El tema de la función en PHP ya lo tengo resuelto, porque también hace falta,

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #6 (permalink)  
Antiguo 27/05/2012, 05:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Expresión Regular amigable

miktrv,
echa un vistazo a las expresiones regulares en MySQL y verás que en el manual sólo se usan para select y devuelven 1 o 0. No parecen permitir todo lo que se permite en programación. No soy un especialista en ello, ni siquiera un buen conocedor, pero me da la impresión de que no podrás hacer lo que quieres con eso directamente en la base, es decir, decirle que te busque el elemento [a|A|Á|á|À|à|â]1 y lo cambie por a, al menos con una consulta y sin usar funciones o procedimientos almacenados. Solo lo he visto usado en MySQL para consultas de select que devuelve verdadero o falso
Mira no obstante aquí:
http://techras.wordpress.com/2011/06...ace-for-mysql/
para que veas las posibles soluciones con funciones y procedimientos, aunque si lo devuelves y no lo almacenas no será fácil buscarlos. Si sólo es para mostrar, podrías hacer una función en la que entrara la cadena y quedara convertida, y luego la llamarías, eso creo que sería posible.
Consultas con replace anidados podrían servir, pero son muchas las anidaciones.
SELECT REPLACE(LOWER(REPLACE(REPLACE(tucampo,' ', '-'),'&','')),'ó','o') FROM tutabla
Por otra parte, aunque entiendo tu posición de no querer almacenar en dos campos lo que dices que es lo mismo, pero que en realidad no lo es. Si necesitas una cadena como esa para la url y quieres buscarla rápido y de manera eficiente, ese nuevo campo que guarda la cadena una vez indexado te permitirá consultas rápidas. Luego está el problema de las coincidencias. A mí se me dio el caso de que al hacer lo que dices sobre una cadena utf8 se producían coincidencias y ya no eran valores únicos, imagina las cadenas tú, gato y tu gato; su conversión daría el mismo resultado tu-gato, y ello requiere un control de coincidencias y añadir, en caso de producirse el identificador al final o algo así. Naturalmente, tienes que estar atento a la codificación.

Última edición por jurena; 27/05/2012 a las 05:28
  #7 (permalink)  
Antiguo 27/05/2012, 05:52
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Expresión Regular amigable

Hola buenas de nuevo,

Muchas gracias por tu tiempo. Los puntos que me comentas ya los he pensado anteriormente. De hecho, mi primer sistema usa replace anidados, pero me parece un poco feo. Para los campos uso UNIQUE aunque sólo con esa parte no solucionas todo el problema. Aparte, podrías hacer una simple comprobación antes de insertar el registro, del tipo... si existe este título amigable no lo insertes y concatenale el id o fecha al final. ( Con el campo que tu me comentas puede pasar exactamente lo mismo )

Más que nada quiero intentar todo esto porque wordpress parece hacer algo similar, que aún nose como funciona.. porque en la base de datos no he visto ningún campo que guarde la url.

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #8 (permalink)  
Antiguo 27/05/2012, 14:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Expresión Regular amigable

Al parecer, en el caso de wordpress se trata de un plugin programado con PHP llamado Nice Search.
Mira aquí:
http://blogandweb.com/wordpress/urls...-en-wordpress/
  #9 (permalink)  
Antiguo 29/05/2012, 01:00
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Expresión Regular amigable

Hola buenas de nuevo,

Ese plugin no es para las url de búsqueda?

Yo no me refiero a eso, si no a las url de cada entrada,

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo

Etiquetas: regular, select, sql, amigables, campos
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 22:08.