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

Query no encuentra un valor en la BD

Estas en el tema de Query no encuentra un valor en la BD en el foro de Mysql en Foros del Web. Vereis tengo esta query: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT * FROM tmarcas AS tmar WHERE CONCAT ( IFNULL ( tmar . marca , ...
  #1 (permalink)  
Antiguo 15/11/2012, 15:45
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Query no encuentra un valor en la BD

Vereis tengo esta query:
Código SQL:
Ver original
  1. SELECT * FROM tmarcas AS tmar WHERE CONCAT(IFNULL(tmar.marca,'')) REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l') LIMIT 0,6

para sacar un valor que hay en la BD que es "cebemovil".

Con otros valores me los saca bien, pero este no es capaz de encontrarlo la SQL
¿Por que?

Gracias
  #2 (permalink)  
Antiguo 16/11/2012, 02:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Query no encuentra un valor en la BD

Por que ese concat?

CONCAT(IFNULL(tmar.marca,'')) REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l')
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 16/11/2012 a las 02:16
  #3 (permalink)  
Antiguo 16/11/2012, 06:15
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Cita:
Iniciado por quimfv Ver Mensaje
Por que ese concat?

CONCAT(IFNULL(tmar.marca,'')) REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l')
Perdona, se me olvidó quitarlo.
Es q la consulta llevaba mas campos, pero tampoco funciona sin el CONCAT.

¿ALguna idea?
  #4 (permalink)  
Antiguo 16/11/2012, 08:59
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

ayudaaa!!!!!!!!!!!!!!!!!!!
  #5 (permalink)  
Antiguo 16/11/2012, 11:48
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Nadie sabe que pasa?
  #6 (permalink)  
Antiguo 16/11/2012, 12:59
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

El campo es UTF-8_general_ci
  #7 (permalink)  
Antiguo 16/11/2012, 13:34
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: Query no encuentra un valor en la BD

Mira, revisé el resultado de una consulta básica tomando tu ejemplo, y no he tenido ningún problema:
Cita:
SELECT 'cebemovil' REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l');
Filas: 1
'cebemovil' REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l')
1
En ese contexto, el "1" que muestra la respuesta equivale al TRUE, lo que quier decir que efectivamente encontró coincidencias.
Así, pues, evidentemente no es un problema de funcionamiento de la condición, sino que podría ser de datos, o bien que no estás usando las condiciones correctas, pero no es un problema de que no pueda detectar la correspondencia entre la cadena, y la expresión regular.
Yo que tu revisaría el resto de las cosas y no eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 16/11/2012, 15:12
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Mira, revisé el resultado de una consulta básica tomando tu ejemplo, y no he tenido ningún problema:
En ese contexto, el "1" que muestra la respuesta equivale al TRUE, lo que quier decir que efectivamente encontró coincidencias.
Así, pues, evidentemente no es un problema de funcionamiento de la condición, sino que podría ser de datos, o bien que no estás usando las condiciones correctas, pero no es un problema de que no pueda detectar la correspondencia entre la cadena, y la expresión regular.
Yo que tu revisaría el resto de las cosas y no eso.
Pues es rarisimo pq mi bd, tablas y campos varchar son todos UTF8_general_ci y mis paginas php tb son UTF8 charset.

¿Alguna idea compañero?
  #9 (permalink)  
Antiguo 16/11/2012, 15:15
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Mira, revisé el resultado de una consulta básica tomando tu ejemplo, y no he tenido ningún problema:
En ese contexto, el "1" que muestra la respuesta equivale al TRUE, lo que quier decir que efectivamente encontró coincidencias.
Así, pues, evidentemente no es un problema de funcionamiento de la condición, sino que podría ser de datos, o bien que no estás usando las condiciones correctas, pero no es un problema de que no pueda detectar la correspondencia entre la cadena, y la expresión regular.
Yo que tu revisaría el resto de las cosas y no eso.
Prueba a poner cebemovil con tilde "cebémovil" por ejemplo, veras como no devuelve nada. Devuelve 0, en vez de 1:

Código MySQL:
Ver original
  1. SELECT 'cebemovil' REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l');
  #10 (permalink)  
Antiguo 16/11/2012, 17:02
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: Query no encuentra un valor en la BD

Pues mira. Para evitar dudas, usé lo mismo que posteas, pero poniéndole acento en todas las vocales, cosa que la prueba sea absoluta, y éste es el resultado:
Código MySQL:
Ver original
  1. mysql> SELECT 'cébémóvíl' REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l') prueba;
  2. +--------+
  3. | prueba |
  4. +--------+
  5. |      1 |
  6. +--------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql>
Como puedes ver, funciona.

Entonces, si sigues teniendo problemas, no es por las expresiones regulares, sino por otra causa, que puede ser tanto de programación (lenguajes son tema off-topic acá), como de datos. Lo que seguro no es, es por el uso de la sentencia en SQL.
__________________
¿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 17/11/2012, 11:14
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pues mira. Para evitar dudas, usé lo mismo que posteas, pero poniéndole acento en todas las vocales, cosa que la prueba sea absoluta, y éste es el resultado:
Código MySQL:
Ver original
  1. mysql> SELECT 'cébémóvíl' REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöôøõ]v[iíìïî]l') prueba;
  2. +--------+
  3. | prueba |
  4. +--------+
  5. |      1 |
  6. +--------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql>
Como puedes ver, funciona.

Entonces, si sigues teniendo problemas, no es por las expresiones regulares, sino por otra causa, que puede ser tanto de programación (lenguajes son tema off-topic acá), como de datos. Lo que seguro no es, es por el uso de la sentencia en SQL.
Ok gracias.
A mi me da error, me devuelve 0 filas.
¿Puede ser por alguna configuracion que hay que pooner en el servidor en el .htaccess o en algun sitio? o no tiene nada que ver?
  #12 (permalink)  
Antiguo 17/11/2012, 11:42
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: Query no encuentra un valor en la BD

Cita:
¿Puede ser por alguna configuracion que hay que pooner en el servidor en el .htaccess o en algun sitio? o no tiene nada que ver?
Lo dudaría...
¿Verificaste que no sea un error de programación, que esté generando una cadena de texto que no es lo que crees?
¿Con qué lenguaje estás trabajando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 17/11/2012, 11:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Query no encuentra un valor en la BD

Código MySQL:
Ver original
  1. mysql> SELECT 'cébémóvíl' REGEXP('[cç][eéèëê]b[eéèëê]m[oóòöô]v[iíìïî]l') prueba;

esto sin øõ funciona bien en la consola, de mi maquina.

Encambio si lo ejecuto con el Query browser o con el Navicat NO funciona, con o sin øõ, retorna 0 FALSE.

Quizas, mdromed, no lo esta ejecutando directamente... pero me sorprende la diferencia, tienes alguna explicación gnzsoloyo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #14 (permalink)  
Antiguo 17/11/2012, 12:39
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: Query no encuentra un valor en la BD

A mi entender, lo más probable es un defecto en la conversión de los caracteres que se ingresan, respecto de los que los que se envían a MySQL.
Es, supongo, algo semejante a lo que ocurriría si en lugar de recibir "é", la consulta recibiese "&eacute", el resultado sería completamente diferente.
En parte es una suposición, pero es muy posible que el problema se esté produciendo a ese nivel.

De todos modos, como aclaración, la prueba realizada la hice con phpMyAdmin, MySQL Workbench, MySQL Query Bowser y con la consola de MySQL, y sólo funciona bien con la consola.
Ahora bien, si vamos al manual, la explicación de todo este enredo se vuelve muy, pero muy simple:
Cita:
REGEXP y RLIKE usan el conjunto de caracteres actual (ISO-8859-1 Latin1 por defecto) al decidir el tipo de un carácter. Atención: Estos operadores no pueden trabajar con múltiples bytes.
Al ser los caracteres mencionados, utf8, es posible que se generen conflictos y que eso explique un comportamiento tan anómalo.

Yo creo que si en lugar de hacer esto tan retorcido, simplemente cusa otras posibilidades, no debería tener problemas:

Código MySQL:
Ver original
  1. mysql> SELECT ('cébémóvíl' SOUNDS LIKE 'cebemovil') prueba;
  2. +--------+
  3. | prueba |
  4. +--------+
  5. |      1 |
  6. +--------+
  7. 1 row in set (0.00 sec)
Creo que el tema anda por allí.
__________________
¿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; 17/11/2012 a las 13:00
  #15 (permalink)  
Antiguo 17/11/2012, 15:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Query no encuentra un valor en la BD

Ahí debe estar el problema, en el manual siempre esta la explicación. Sorprende que MySQL Workbench, MySQL Query Bowser siendo de MySql no funcionen.

Lo que tampoco entiendo es la utilidad de una REGEXP ten concreta para una palabra, la solucion SOUNDS LIKE (que no conocia) parece mucho mas práctica.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #16 (permalink)  
Antiguo 18/11/2012, 10:01
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Cita:
Iniciado por gnzsoloyo Ver Mensaje
A mi entender, lo más probable es un defecto en la conversión de los caracteres que se ingresan, respecto de los que los que se envían a MySQL.
Es, supongo, algo semejante a lo que ocurriría si en lugar de recibir "é", la consulta recibiese "&eacute", el resultado sería completamente diferente.
En parte es una suposición, pero es muy posible que el problema se esté produciendo a ese nivel.

De todos modos, como aclaración, la prueba realizada la hice con phpMyAdmin, MySQL Workbench, MySQL Query Bowser y con la consola de MySQL, y sólo funciona bien con la consola.
Ahora bien, si vamos al manual, la explicación de todo este enredo se vuelve muy, pero muy simple:

Al ser los caracteres mencionados, utf8, es posible que se generen conflictos y que eso explique un comportamiento tan anómalo.

Yo creo que si en lugar de hacer esto tan retorcido, simplemente cusa otras posibilidades, no debería tener problemas:

Código MySQL:
Ver original
  1. mysql> SELECT ('cébémóvíl' SOUNDS LIKE 'cebemovil') prueba;
  2. +--------+
  3. | prueba |
  4. +--------+
  5. |      1 |
  6. +--------+
  7. 1 row in set (0.00 sec)
Creo que el tema anda por allí.


Genial!
No sabia que existia SOUNDS LIKE
Asi funciona:

SELECT 'cébémóvíl' sounds like ('[cç][eéèëê]b[eéèëê]m[oóòöô]v[iíìïî]l') as prueba;
  #17 (permalink)  
Antiguo 18/11/2012, 13:38
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Sin embargo no vale SOUNDS LIKE cuando comparas una cadena mas extensa q contenga palabras que suenen distinto.
  #18 (permalink)  
Antiguo 18/11/2012, 13:40
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Es que es rarisimo lo que pasa.
Yo creo que REGEXP falla.

Probad:
SELECT 'cebémóvil' REGEXP 'c[eéèëê]b[eéèëê]m'
No funciona

Probad:
SELECT 'cebémóvil' REGEXP 'c[eéèëê]b[eéèëê]'
Sin la "m" final sí que funciona
  #19 (permalink)  
Antiguo 18/11/2012, 13:42
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Otra solucion, dando esto del REGEXP como imposible seria que existiese una funcion en mysql que normalzara los textos guardados en la BD para compararlos dentro de la SELECT.
¿Existe alguna forma de quitar acentos y ñ al texto de un campo para tratarlo ya normalizado dentro de la query?
  #20 (permalink)  
Antiguo 18/11/2012, 14:10
Avatar de mdromed  
Fecha de Ingreso: septiembre-2009
Mensajes: 389
Antigüedad: 14 años, 7 meses
Puntos: 8
Respuesta: Query no encuentra un valor en la BD

Bueno aun no caigo por que, pero funciona!
Si le añadimos un "mas" despues de cada cierre de corchetes funciona perfecto:

SELECT 'cebémóvil' REGEXP 'c[eéèëê]+b[eéèëê]m+'

Última edición por mdromed; 18/11/2012 a las 14:39

Etiquetas: Ninguno
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 01:29.