Foros del Web » Programación para mayores de 30 ;) » RegExp »

Problema con REGEXP y JSON

Estas en el tema de Problema con REGEXP y JSON en el foro de RegExp en Foros del Web. Hola gente buenas tardes. Bueno tengo un problema en cuanto al uso de Regexp y json en un sitio que estoy haciendo. El problema es ...
  #1 (permalink)  
Antiguo 02/09/2012, 13:43
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Problema con REGEXP y JSON

Hola gente buenas tardes.

Bueno tengo un problema en cuanto al uso de Regexp y json en un sitio que estoy haciendo.

El problema es el siguiente, tengo esta query:

SELECT * FROM bandas WHERE id regexp '[[:<:]]["16"][[:>:]]'

Y el ["16"] es el ID que necesito comparar con el campo ID de la banda.

El tema es que al ejecutarlo, me tira como resultado una banda con ID 6.


Y si pongo ["61"] me pasa lo mismo, me tira el id 6!

También probé con multiples elementos, : ["4", "62"]

Y me sigue pasando lo mismo, el elemento 4 lo lee bien, pero el 62 no, me lee el 6.


¿Como debería hacerlo?

Desde ya muchas gracias!
  #2 (permalink)  
Antiguo 02/09/2012, 14:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con REGEXP y JSON

SELECT * FROM bandas WHERE id regexp '[[:<:]]16[[:>:]]'
  #3 (permalink)  
Antiguo 02/09/2012, 14:20
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Problema con REGEXP y JSON

Hola Jurena, gracias por responder.

El json_encode me lo deja así ["16", "5"]

Osea, separados con las comillas y los corchetes.
Por eso no puedo sacarlo, ya que me sirve para poner múltiples ID's
  #4 (permalink)  
Antiguo 02/09/2012, 15:29
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con REGEXP y JSON

A ver si he entendido:
tienes un campo al que yo llamaré jsonencode en tu tabla en el que guardas como cadena de texto jsonencode. Lo que quieres es buscar dentro de esa cadena valores como por ej. 16. Lo que te propuse debería encontrarlo, pero si quieres que encuentre también las comillas, inténtalo así. No sé si te habré entendido, pero si no es así, intenta aclarar qué valores guarda ese id y qué valores la banda y si lo que quieres es compararlos o qué.
SELECT *
FROM tutabla
WHERE jsonencode
REGEXP '"[[:<:]]16[[:>:]]"'
  #5 (permalink)  
Antiguo 02/09/2012, 16:19
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Problema con REGEXP y JSON

No, perdon, tal ves no me expliqué bien.



Tengo lo siguiente:

Una tabla que se llama Videos.


Que se distribuye así:

id
idbanda
idyoutube
titulo
url_tag


Y después tengo otra que se llama Bandas

Que es así

id
titulo
url_tag
y otras.

El json_encode me da ese ["16"]
Ya hecho así, porque es el valor dentro del array que lo codifiqué en json.

Entonces la query es mas o menos así.
"SELECT * FROM bandas WHERE id regexp '[[:<:]]".$resultado['idbanda']."[[:>:]]'"

Entonces, no puedo editar ese ["16"], ya viene así, y debería haber alguna forma de hacer el REGEXP, ya que así es como me lo devuelve el json_encode!

Espero tu respuesta, desde ya muchas gracias!
  #6 (permalink)  
Antiguo 02/09/2012, 16: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: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con REGEXP y JSON

Cita:
Y el ["16"] es el ID que necesito comparar con el campo ID de la banda.
Empecemos desde el inicio: ¿Por qué usas REGEXP para comparar un ID único con el que estás tratando de encontrar?
Si 16 es el ID que debes encontrar, ¿por qué usas eso?
No le veo sentido, porque si debes encontrar el ID 16 de la tabla, simplemente debes comparar con "="...
Me explico brevemente: REGEX compara cadenas en base a patrones, y específicamente en el caso que te ocupa, en tu consulta vemos:
Código MySQL:
Ver original
  1. SELECT * FROM bandas WHERE id regexp '[[:<:]]["16"][[:>:]]'
Tenemos que usas esto:
Código SQL:
Ver original
  1. [[:<:]], [[:>:]]
Y según el manual de referencia:
Cita:
Estos marcadores representan limitadores de palabras. Concuerdan con el inicio y el final de palabras, respectivamente. Una palabra es una secuencia de caracteres de palabra que no son precedidos ni seguidos por caracteres de palabra
Es decir, te devolverá cualquier coincidencia con el inicio o el final de lo que exista en la tabla...
Y si buscas 16, devolverá 6, 26, 16, 66, 986, porque todos terminan en 6.

Lo que debes entender es que tanto LIKE como REGEX buscan por aproximación, y lo que tu estás buscando es un valor entero exacto, y debe devolverte la coincidencia exacta con el entero que es ID de la tabla...

Y otra cosa que debes tener en cuenta es que el hecho que uses JSON es ajeno a MySQL, porque es el modo en que manipulas el dato a nivel de programación, y eso no tiene relación con el SQL o MySQL, porque MySQL no interpreta JSON...
En otras palabras, que lo pases, lo codifiques o lo decodifiques con JSON, para la consulta es total y absolutamente irrelevante. Lo que el SQL requiere es el entero, no cómo lo transmitiste.



Explicate por qué usas una función cuya función no es la de hacer estas comparaciones...
__________________
¿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; 02/09/2012 a las 17:02
  #7 (permalink)  
Antiguo 03/09/2012, 08:05
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Problema con REGEXP y JSON

Hola! Muchas gracias por la respuesta



Mirá, el tema es que aveces son varios, entonces sería algo como


["16", "5", "21"]


Y en la tabla bandas, está solamente el número, sin las comas ni las comillas y ni los corchetes.

¿Como debería hacer en este caso?

Desde ya muchas gracias!
  #8 (permalink)  
Antiguo 03/09/2012, 08:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con REGEXP y JSON

Código MySQL:
Ver original
  1. FROM bandas
  2. WHERE id IN(16,5, 21);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 03/09/2012, 11:58
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Problema con REGEXP y JSON

Perfecto muchas gracias!

Hay alguna forma de hacerlo con los corchetes en ves de los paréntesis? o solo me conviene convertir los corchetes a paréntesis con php?
  #10 (permalink)  
Antiguo 03/09/2012, 12:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con REGEXP y JSON

Esas cosas son reglas del SQL, y no pueden ser cambiadas porque son parte del estándar ANSI-SQL.
Deben ser paréntesis. Los corchetes se usan para otras cosas.
Puntualmente, esta forma del IN() es una extensión de las subconsultas, por lo que jamás podrías usar corchetes.
Atente a las reglas de cada lenguaje. Cuando embebes uno dentro de otro, debes obligatoriamente respetar las reglas de sintaxis de cada uno en su ambiente de existencia.

La codificación "cómoda" no existe. Porque una cosa resulte cómoda en un lenguaje, no implica que debas transportarla sin convertirla de reglas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 03/09/2012, 18:57
 
Fecha de Ingreso: marzo-2008
Ubicación: Santa Cruz, Argentina
Mensajes: 433
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Problema con REGEXP y JSON

Perfecto, te agradezco mucho por tu ayuda, es bueno saberlo, lo del uso del regexp y lo de las reglas de cada lenguaje.
Tema solucionado!

Etiquetas: json, select, 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 23:44.