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:
Tenemos que usas esto:
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...