Foros del Web » Programando para Internet » PHP »

Qué falla en esta consulta?

Estas en el tema de Qué falla en esta consulta? en el foro de PHP en Foros del Web. Hola a tod@s: Le estoy dando mil vueltas y todavía no lo he sacado. Hago una consulta a MySql. Tengo una función que cambia los ...
  #1 (permalink)  
Antiguo 17/09/2003, 04:44
 
Fecha de Ingreso: diciembre-2001
Ubicación: Vigo
Mensajes: 38
Antigüedad: 22 años, 10 meses
Puntos: 0
Qué falla en esta consulta?

Hola a tod@s:

Le estoy dando mil vueltas y todavía no lo he sacado.

Hago una consulta a MySql. Tengo una función que cambia los acentos, y la sentencia sql me queda como sigue, p.ej. para buscar "de":

SELECT * FROM link WHERE `Descripcion` LIKE '%d[eéè]%'

He probado a cambiar [e|é|è]. La primiera funciona bien en ASP, pero no en MySql. ¿Qué diablos falla...?

Gracias anticipadas por vuestra colaboración.
__________________
El que estudia, olvida; el que lee, aprende; y el que hace, sabe (Algún autodidacta, supongo...)
  #2 (permalink)  
Antiguo 17/09/2003, 04:55
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Primero, esta pregunta deberia ir en Base de datos, ya que es sobre la consulta SQL en concreto.

Mira, distintas bases de datos usan distintas versiones de SQL. Lo que funciona en access no tiene por que funcionar en MySQL.

Y este es el caso. En MySQL, LIKE no soporta expresiones regulares. Pero tiene RLIKE que si las soporta. Mas info: http://www.mysql.com/doc/en/String_c...functions.html

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 18/09/2003, 06:07
 
Fecha de Ingreso: diciembre-2001
Ubicación: Vigo
Mensajes: 38
Antigüedad: 22 años, 10 meses
Puntos: 0
He visto el manual, pero sigue sin funcionar.
He probado con RLIKE , con REGEXP, con corchetes, sin corchetes, con el signo $, etc,etc,etc,etc........

He conseguido que no me dé error, pero en ocasiones me lista todos los registros porque, p.ej. en la consulta:

SELECT * FROM link WHERE `Descripcion` RLIKE "[la|á|à]" OR `Descripcion` RLIKE "[e|é|è]xtr[a|á|à]" LIMIT 0, 5

lista todos los registros, porque las "a" y las "e", existen en todos ellos.
Ya llevo 3 días dándole vueltas y ya me están tocando las pltas.
__________________
El que estudia, olvida; el que lee, aprende; y el que hace, sabe (Algún autodidacta, supongo...)
  #4 (permalink)  
Antiguo 18/09/2003, 06:40
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Bien, puede que MySQL no use las mismas expresiones regulares que PHP, y que estes probando expresiones regulares que no significan nada para MySQL. MySQL usa http://www.mysql.com/doc/en/Regexp.html . Y he hecho pruebas con:

select 'virgen extra olivo' RLIKE 'extr[aá]' devuelve 1
select 'virgen extrá olivo' RLIKE 'extr[aá]' devuelve 1
select 'virgen extrà olivo' RLIKE 'extr[aá]' devuelve 0

Y en tu select que pones, pues logico. Con

`Descripcion` RLIKE "[la|á|à]"

querias poner que contenga la cadena la (o lá o là), pero eso es dentro de cualquier palabra. Por eso los buscadores no suelen permitir buscar por cadenas de menos de 4 caracteres. Si lo que querias era la palabra la (o lá o là), en esa pagina pone que hay que usar [[:<:]] y [[:>:]] .

Asi que te toca seguir leyendo y probando.

Suerte.

PD: Hoy ha sido el primer dia que leo esa pagina del manual, y tengo poca experiencia con expresiones regulares de PHP, asi que puede que lo que haya puesto no sea 100% cierto, pero creo que me acerco bastante.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 18/09/2003, 08:26
 
Fecha de Ingreso: diciembre-2001
Ubicación: Vigo
Mensajes: 38
Antigüedad: 22 años, 10 meses
Puntos: 0
Uffff! ya funciona.

No sé que estaría haciendo mal, porque esa forma creo que ya la había probado, pero ya tenía un kko mental qu no me enteraba de ná.

josemi: mil gracias por tu paciencia.
Un saludote.
__________________
El que estudia, olvida; el que lee, aprende; y el que hace, sabe (Algún autodidacta, supongo...)
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 21:19.