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

Order by según

Estas en el tema de Order by según en el foro de Mysql en Foros del Web. Hola a todos, ando un poco perdido en lo que se refiere al "order by" de una sentencia sql. Concretamente ando buscando formas de ordenar ...
  #1 (permalink)  
Antiguo 27/08/2010, 04:28
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Order by según

Hola a todos,

ando un poco perdido en lo que se refiere al "order by" de una sentencia sql. Concretamente ando buscando formas de ordenar los resultados con respecto a las condiciones "where" realizadas.

Imaginemos que tengo un:

Código PHP:
SELECT FROM tabla WHERE campo LIKE '%termino1%' OR campo LIKE '%termino2%' OR campo LIKE '%termino3%' 
Me gustaría saber si la máquina de alguna forma puede devolverme los valores según el grado de coincidencias. Es decir, que primero me devuelva los resultados que coincidieron en las 3 condiciones, despues los que coincideron en 2 y finalmente los que coincideron en 1.

¿Es posible esto? ¿Cómo habría que sentenciarlo?
  #2 (permalink)  
Antiguo 27/08/2010, 05:08
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: Order by según

La única forma que encuentro razonable es hacerlo por UNOIN cambiando las condiciones lógicas, porque, precisamente) las condiciones que planteas son excluyentes entre sí.
No se puede plantear una proposicion así en un ORDER BY. Tienes que recurrir a la consulta en sí para obtenerlo.
Código MySQL:
Ver original
  1. FROM tabla
  2. WHERE campo LIKE '%termino1%' AND campo LIKE '%termino2%' AND campo LIKE '%termino3%'
  3.  SELECT *
  4. FROM tabla
  5. WHERE campo LIKE '%termino1%' AND (campo LIKE '%termino2%' AND NOT campo LIKE '%termino3%' )
  6.  SELECT *
  7. FROM tabla
  8. WHERE campo LIKE '%termino1%' AND NOT (campo LIKE '%termino2%' OR campo LIKE '%termino3%');
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/08/2010, 05:32
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Order by según

Hmmmm tienes razón, así debería funcionar, pero no me convence del todo la idea, ya que pueden ser más que estas 3 condiciones que he puesto en el ejemplo. Plantearé el problema de otra forma, igual tenéis alguna idea para mi, que como ya digo, no soy demasiado versado en mysql.

La situación es la siguiente. Necesito relacionar diferentes entradas por medio de tags. Hasta ahora existe un campo "tags" en cada entrada que lleva una serie de palabras separadas por coma ",". Para relacionar las entradas entre sí, creo un array a partir de los tags de la entrada principal y (tal como en el ejemplo) busco cada término en el campo de "tags" de las demás entradas.

Mi problema es que los resultados llegan en un orden totalmente alatorio y me gustaría tener una lista de entradas relacionadas que empiece con aquellas que tengan un alto grado de coincidencia con los tags de la entrada primaria.

¿Cómo lo haríais?

* Si hace falta cambiar la estructura de la tabla, la forma de guardar los tags o lo que sea, tampoco sería problema.
  #4 (permalink)  
Antiguo 27/08/2010, 12:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Order by según

Si tus tablas son MyIsam, podrías usar INDEX FULLTEXT para ese campo o campos y según varios criterios, entre los que se encuentra el número de palabras coincidentes, te devolverá ordenados de manera descendente los registros en que aparezcan, es decir, de más coincidencias a menos. Si usas un campo multivaluado, es decir, con varias palabras separadas por coma, eso podría valerte.
  #5 (permalink)  
Antiguo 29/08/2010, 08:43
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Order by según

Muchas gracias por tu ayuda. De hecho, indagando averigué esa opción y ya la he aplicado. Funciona tal como quería. ;)

Etiquetas: order-by
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 11:37.