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

Error en consulta por relevancia

Estas en el tema de Error en consulta por relevancia en el foro de Mysql en Foros del Web. Hola, tengo una consulta sencilla en MySql. La sentencia es: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT * FROM posts WHERE MATCH ( descripcion ) ...
  #1 (permalink)  
Antiguo 20/01/2012, 10:50
 
Fecha de Ingreso: junio-2010
Mensajes: 51
Antigüedad: 14 años, 5 meses
Puntos: 0
Error en consulta por relevancia

Hola, tengo una consulta sencilla en MySql. La sentencia es:

Código MySQL:
Ver original
  1. SELECT * FROM posts WHERE MATCH(descripcion) AGAINST ('+clave' IN BOOLEAN MODE) AS relevancia

El error que me da es:
Microsoft OLE DB Provider for ODBC Drivers error '80040e21'
El controlador ODBC no admite las propiedades solicitadas.

El caso es que si le quito as relevancia, funciona correctamente. Como veis, trabajo con asp, pero creo que la consulta debería funcionar igualmente. Alguna ayudita, por favor? Gracias anticipadas.
  #2 (permalink)  
Antiguo 20/01/2012, 11:32
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Error en consulta por relevancia

Hola JulioGaGarcia:

Qué es lo que pretendes hacer al poner AS relevancia en el WHERE????

la cláusula AS es utilizada para definir alias a los campos (y por cierto ya es obsoleta y podrías no ponerla), pero esto se definen en la sección SELECT, no en el WHERE.

Es muy diferente poner esto:

SELECT * FROM posts
WHERE MATCH(descripcion) AGAINST ('+clave' IN BOOLEAN MODE) AS relevancia

a poner esto:

SELECT MATCH(descripcion) AGAINST ('+clave' IN BOOLEAN MODE) AS relevancia
FROM posts.

Checa la documentación oficial:

http://dev.mysql.com/doc/refman/5.0/...xt-search.html

En ningún lugar encontrarás un ejemplo como el que planteas. En otras palabras es correcto que no se te permita colocar el AS relevancia en la sección WHERE

Saludos
Leo.
  #3 (permalink)  
Antiguo 21/01/2012, 06:24
 
Fecha de Ingreso: junio-2010
Mensajes: 51
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Error en consulta por relevancia

Muchas gracias, leonardo_josue por tu repuesta y la aclaración, pero me queda una duda: relevancia no es un campo de la Base de Datos, sino un valor proporcionado por el motor mysql. Si, como dices, no es necesario definir el alias, ¿cómo sería la consulta correcta? Te agradezco de antemano tu interés. Gracias.
  #4 (permalink)  
Antiguo 21/01/2012, 07:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error en consulta por relevancia

Cita:
¿cómo sería la consulta correcta?
Perdona que me meta, pero ¿tienes problemas de vista o de lectura?
Leo ya te dijo cómo iría:
Código MySQL:
Ver original
  1. SELECT MATCH(descripcion) AGAINST ('+clave' IN BOOLEAN MODE) relevancia
  2. FROM posts
.¿Qué parte no entendiste?
E incluso en el link que te pasó, también tienes ejemplos del caso, perfectamente aplicables:
Código MySQL:
Ver original
  1. SELECT id, body, MATCH (title,body) AGAINST
  2. ('Security implications of running MySQL as root') AS score
  3. FROM articles WHERE MATCH (title,body) AGAINST
  4. ('Security implications of running MySQL as root');

Por lo menos podrías haberte molestado en leer el link... ¿no te parece?

Respecto a los alias, tienes que entender que los alias de las columnas sólo se definen en el SELECT y los de las tablas en el FROM.
Pero por una restricción generalizada de todos los DBMS que conozco, un alias de una columna no se puede usar en el WHERE. Esto se debe a que la evaluación del WHERE se hace por cada registro devuelto, mientras que el alias de la columna sólo se aplica a la tabla resultado final. No apuntan a la misma cosa.
Sí puedes usar un alias de tabla en el WHERE, pero eso es otra cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/01/2012, 08:18
 
Fecha de Ingreso: junio-2010
Mensajes: 51
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Error en consulta por relevancia

Gracias por tu respuesta.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Perdona que me meta, pero ¿tienes problemas de vista o de lectura?
Leo ya te dijo cómo iría:
Código MySQL:
Ver original
  1. SELECT MATCH(descripcion) AGAINST ('+clave' IN BOOLEAN MODE) relevancia
  2. FROM posts
.¿Qué parte no entendiste?
E incluso en el link que te pasó, también tienes ejemplos del caso, perfectamente aplicables:
Código MySQL:
Ver original
  1. SELECT id, body, MATCH (title,body) AGAINST
  2. ('Security implications of running MySQL as root') AS score
  3. FROM articles WHERE MATCH (title,body) AGAINST
  4. ('Security implications of running MySQL as root');

Por lo menos podrías haberte molestado en leer el link... ¿no te parece?

Respecto a los alias, tienes que entender que los alias de las columnas sólo se definen en el SELECT y los de las tablas en el FROM.
Pero por una restricción generalizada de todos los DBMS que conozco, un alias de una columna no se puede usar en el WHERE. Esto se debe a que la evaluación del WHERE se hace por cada registro devuelto, mientras que el alias de la columna sólo se aplica a la tabla resultado final. No apuntan a la misma cosa.
Sí puedes usar un alias de tabla en el WHERE, pero eso es otra cosa.
Pues debo estar muy mal de la vista, o este post se visualiza diferente en cada PC:

Código Cita::
Ver original
  1. SELECT MATCH(descripcion) AGAINST ('+clave' IN BOOLEAN MODE) relevancia

Yo sigo viendo:

Código Cita::
Ver original
  1. SELECT MATCH(descripcion) AGAINST ('+clave' IN BOOLEAN MODE) AS relevancia
  2. FROM posts.

El link ya lo conocía y lo leí íntegro y lo he vuelto a leer buscando más información.

Código Cita::
Ver original
  1. Pero por una restricción generalizada de todos los DBMS que conozco, un alias de una columna no se puede usar en el WHERE.

Eso ya lo dejó muy claro leonardo_josue (hasta ahí soy capaz de entender):
Código Cita::
Ver original
  1. En otras palabras es correcto que no se te permita colocar el AS relevancia en la sección WHERE

Código Cita::
Ver original
  1. Si, como dices, no es necesario definir el alias, ¿cómo sería la consulta correcta?
¿Qué parte de la pregunta no has entendido?

Reitero las gracias por tu interés.
  #6 (permalink)  
Antiguo 21/01/2012, 09:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error en consulta por relevancia

La pregunta en sí no tiene sentido...
Cita:
¿cómo sería la consulta correcta?
La consulta en si es correcta de ambas formas, y si te fijas en el segundo ejemplo, el MATCH() AGAINST() se puede usar incluso en ambas partes al mismo tiempo (SELECT y WHERE). Lo importante es que en el SELECT es para poner el resultado, en el WHERE es para buscarlo.
Bien puede pasar que quieras ver el resultado de esa función, y en ese caso la pones en el SELECT, pero si lo que quieres son los otros datos q ue acompañan a ese registro, no la pones en el SELECT sino en el WHERE.
Es una decisión de desarrollo. No hay una única forma de verlo.
Lo que si te puedo aconsejar es no poner en el SELECT datos que no vayas a usar para mostrar. Son bytes inútiles transmitidos.

En cuanto al ALIAS, es opcional, no necesario. Ponselo si quieres ponerselo, pero no agrega ni saca nada al resultado obtenido.

El único momento donde es práctico ponérselo es si necesitas referirte de una forma simple a la columna, sea porque la usas en una subconsulta, o sea porque la uses en programación, para identificar la columna resultante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 21/01/2012, 10:12
 
Fecha de Ingreso: junio-2010
Mensajes: 51
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Error en consulta por relevancia

Muchas gracias por tu amplio comentario. Ahora lo tengo mucho más claro. Saludos y gracias :)

Etiquetas: relevancia, select, sql
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 16:55.