Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/09/2012, 16:44
Avatar de gnzsoloyo
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, 5 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