Expresiones regulares en MySQL (SOLUCIONADO)

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: maiku, akodo

Responder
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Expresiones regulares en MySQL (SOLUCIONADO)

Mensaje por greer »

Buen día mis estimados...

He buscado por todas partes pero no logro armar una expresión regular para buscar coincidencias en MySQL.

Ejemplo: Tengo en un campo, datos en formato json y hay una opcion llamada evento_fijo con un valor 1:
"evento_fijo" : "1"
Lo que necesito es obtener todas las coincidencias que NO tengan esa opción... osea quiero todos los registros de la tabla que no tengan esa opcion....

Alguien sabe como armar esa expresión regular ?

Con este hago todo lo contrario a lo que quiero hacer:

Código: Seleccionar todo

SELECT * FROM `events` WHERE eventDynamicFields REGEXP '"(evento_fijo)":"(1)"'
Saludos.

Editado -- Sab Feb 21, 2015 12:46 pm --

Bueno jejejeje me auto-respondo....

pense un poco jajajja hice esto:

Código: Seleccionar todo

SELECT * FROM `events` WHERE eventID != (SELECT eventID FROM `events` WHERE eventDynamicFields REGEXP '"(evento_fijo)":"(1)"')
y resultó como necesitaba, me haló todos los registro menos los que coincidieran con esa opción dentro del campo en formato json.

No obstante me gustaria saber como seria sacar este resultado usando solo la expresión regular.... solo por curiosidad...
Última edición por greer el Dom Feb 22, 2015 5:03 am, editado 2 veces en total.
http://greermurray.com

Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Expresiones regulares en MySQL

Mensaje por akodo »

No te voy a decir que no guardes datos en formato json en la DB porque puede resultar útil. Pero lo que estás haciendo está mal.

El rendimiento de esa consulta seguramente sea catastrófico si el número de registros es alto, así que salvo que pongas la mano en el fuego y tengas un número muy limitado de registros, es algo que tienes que cambiar.

Yo extraería ese campo y lo metería como columna en la tabla correspondiente. Así, si las consultas sobre ese campo son frecuentes, puedes poner un índice en la tabla de forma que filtre más rápido. Además, vas a tener la ventaja de que la comparación que va a tener que hacer la DB es más ligera y por tanto más rápida.
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])

Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Expresiones regulares en MySQL

Mensaje por greer »

si... si bien pude dar con lo que queria, al final hice lo que dices.

lo que pasa es que ya ese campo estaba guardado de esa forma con otros datos, por que era información no relevante y en la página web son campos que se crean dinamicamente y para poder guardarlos lo hacia de esa forma...

pero ayer me pidieron hacer algo con esa información en concreto y para no hacer desorden con lo que ya estaba hecho.... (mentira era pereza!!! jajaja) pero al final como dices tu es algo que va a crecer y es mejor hacer el cambio ahora y crearle su propio campo en la BD que despues cuando sea mas critico.

Saludos.

Haa!! pero igual me gustaria saber como se puede armar una expresión regular jajaja como dije antes solo por saber.... derrepente algun erudito en la materia puede ilustrarme jejeje

Saludos! y gracias.

PD.: No se si poner en el título (RESUELTO) ???
http://greermurray.com

Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Expresiones regulares en MySQL

Mensaje por akodo »

De acuerdo a lo que pone en la documentación oficial

Código: Seleccionar todo

SELECT * FROM `events` WHERE eventDynamicFields NOT REGEXP '"(evento_fijo)":"(1)"'
Descargue el gestor de mp3 "Music Manager" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])

Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Expresiones regulares en MySQL

Mensaje por greer »

haaaa la palabra clave es el NOT ...entonces asumo que no hay nada para obtener el mismo resultado pero únicamente en expresión regular...

pense que habia algo como esto, y lo intenté:
[^"(evento_fijo)":"(1)"]
pero no me funcionó! jajaja

Gracias!
http://greermurray.com

Responder
  • Temas similares
    Respuestas
    Vistas
    Último mensaje