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

Order by máximo de 3 campos juntos

Estas en el tema de Order by máximo de 3 campos juntos en el foro de Bases de Datos General en Foros del Web. Muy buenas, es un tema algo difícil de explicar, he estado mirando por Internet y no he visto nada al respecto, os dejo la consulta ...
  #1 (permalink)  
Antiguo 12/02/2016, 04:39
 
Fecha de Ingreso: marzo-2012
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Order by máximo de 3 campos juntos

Muy buenas, es un tema algo difícil de explicar, he estado mirando por Internet y no he visto nada al respecto, os dejo la consulta sql que estoy haciendo ahora mismo.

No hagáis caso la consulta tan grande, solo interesa la forma de ordenar
Código SQL:
Ver original
  1. SELECT a.fecha, a.hora, a.id idJornada, a.id_equipoLocal, b1.nombre nombreLocal, b1.url_imagen fotoLocal, a.id_equipoVisitante, b2.nombre nombreVisitante, b2.url_imagen fotoVisitante, p.id, p.LOCAL, p.empate, p.visitante, p.media_goles, p.resultado_posible,p.ambos_marcaran, l.nombre, l.imagen, l.id id_liga, l.jornada_procesada, l.jornada_actual, c.cuotaBwinLocal,c.cuotaBwinEmpate, c.cuotaBwinVisitante, c.enlaceBwinLocalES, c.enlaceBwinEmpateES, c.enlaceBwinVisitanteES, c.enlaceBwinLocalEN,c.enlaceBwinVisitanteEN,c.enlaceBwinEmpateEN,c.cuotaWilliamLocal,c.cuotaWilliamEmpate,c.cuotaWilliamVisitante,c.enlaceWilliam
  2.                 FROM jornadas a
  3.                 JOIN equipos b1 ON b1.id = a.id_equipoLocal
  4.                 JOIN equipos b2 ON b2.id = a.id_equipoVisitante
  5.                 JOIN ligas l ON l.id = a.id_liga
  6.                 JOIN pronosticos p ON p.id_jornada = a.id
  7.                 JOIN cuotas c ON c.id_jornada = a.id
  8.                 WHERE a.fecha > CURDATE( ) AND a.fecha <= NOW() + INTERVAL 1 DAY
  9.                 AND a.resultado IS NULL
  10.                 AND (
  11.                     p.LOCAL >= 45
  12.                     OR p.empate >= 45
  13.                     OR p.visitante >= 45
  14.                 )
  15.                 ORDER BY p.LOCAL DESC , p.visitante DESC , p.empate DESC LIMIT 15

vale pues eso lo que me hace, es ordenar 1º por local, 2º por visitante y 3º por empate.

Son porcentajes de que gane el local, el visitante o el empate, el campo es INT

pues necesito ordenar todo junto, no se si me explico, porque mi consulta devuelve, ya que primero coloca los mayores de Local, Luego de Visitante, y luego de empate

32, 10, 5
23, 10, 2
12, 15, 3
10, 30, 3
10, 10 , 29

pero al limitarlo a 15 se me cortan y no me muestra el maximo de los 3 campos juntos, por lo que yo quiero que me devuelva

32,10,5
10,30,3
10,10,29

etc... no se si me he explicado bien
ect

Última edición por gnzsoloyo; 12/02/2016 a las 09:25
  #2 (permalink)  
Antiguo 12/02/2016, 08:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Order by máximo de 3 campos juntos

No, no te he entendido, un ejemplo de tus datos, que tienes y que quieres seria mas facil para ayudarte.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 12/02/2016, 08:46
 
Fecha de Ingreso: marzo-2012
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Order by máximo de 3 campos juntos

SQL

Código SQL:
Ver original
  1. SELECT p.LOCAL, p.empate, p.visitante
  2. FROM jornadas a
  3. JOIN equipos b1 ON b1.id = a.id_equipoLocal
  4. JOIN equipos b2 ON b2.id = a.id_equipoVisitante
  5. JOIN ligas l ON l.id = a.id_liga
  6. JOIN pronosticos p ON p.id_jornada = a.id
  7. JOIN cuotas c ON c.id_jornada = a.id
  8. WHERE a.fecha > CURDATE( )
  9. AND a.fecha <= NOW( ) + INTERVAL 1
  10. DAY
  11. AND a.resultado IS NULL
  12. AND (
  13. p.LOCAL >=45
  14. OR p.empate >=45
  15. OR p.visitante >=45
  16. )
  17. ORDER BY p.LOCAL DESC , p.visitante DESC , p.empate DESC
  #4 (permalink)  
Antiguo 12/02/2016, 08:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Order by máximo de 3 campos juntos

tus datos tus datos, no tus queries, o sea espero algo como:

http://www.forosdelweb.com/f21/lista...-join-1147193/
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 12/02/2016, 08:58
 
Fecha de Ingreso: marzo-2012
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Order by máximo de 3 campos juntos

SQL

Código SQL:
Ver original
  1. SELECT p.LOCAL, p.empate, p.visitante
  2. FROM jornadas a
  3. JOIN equipos b1 ON b1.id = a.id_equipoLocal
  4. JOIN equipos b2 ON b2.id = a.id_equipoVisitante
  5. JOIN ligas l ON l.id = a.id_liga
  6. JOIN pronosticos p ON p.id_jornada = a.id
  7. JOIN cuotas c ON c.id_jornada = a.id
  8. WHERE a.fecha > CURDATE( )
  9. AND a.fecha <= NOW( ) + INTERVAL 1
  10. DAY
  11. AND a.resultado IS NULL
  12. AND (
  13. p.LOCAL >=45
  14. OR p.empate >=45
  15. OR p.visitante >=45
  16. )


Y sale lo siguiente.


local -empate -visitante

76 - 9 - 15
72 - 5 - 23
70 - 14 - 16
13 - 12 - 75
67 - 11 - 22
67 -11 - 22
66 - 10 - 24
20 - 67 - 13
67 - 27 - 6
66 - 21 - 13
65 - 25 - 10
87 - 5 - 8
65 - 31 - 4
64 -5 - 31
66 - 10 - 24
68 - 21 - 11
66 - 21 - 13

vale, pues primero solo me interesan los 15 primeros resultados, eso con un limit 15 se solucionaría, y luego quiero que me lo ordene de máximo a mínimo pero comparando los 3 campos, y devolverme algo asi

local- empate- visitante

87 - 5 - 8
76 - 9 - 15
13 -12 - 75
72 -5 - 23
70 -14 - 16
20 -67 - 13
68 -21 - 11
67 -11 - 22
67 -11 - 22
67 - 27 - 6
66 - 10 - 24
66 - 21 - 13
65 - 25 - 10
65 - 31 - 4
66 - 10 - 24
66 - 21 - 13
64 - 5 - 31


Un Saludo y gracias
  #6 (permalink)  
Antiguo 12/02/2016, 09:24
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Order by máximo de 3 campos juntos

Y cual es la logica para saber el orden, o sea para saber que estos son los 3 primeros cual es tu logica

87 - 5 - 8
76 - 9 - 15
13 -12 - 75
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 12/02/2016, 09:32
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 máximo de 3 campos juntos

Probemos esto:
Código MySQL:
Ver original
  1. SELECT local, empate, visitante
  2.     (SELECT
  3.         p.LOCAL, p.empate, p.visitante, GREATEST(p.LOCAL, p.empate, p.visitante) mayresult
  4.     FROM
  5.         jornadas a
  6.         INNER JOIN equipos b1 ON b1.id = a.id_equipoLocal
  7.         INNER JOIN equipos b2 ON b2.id = a.id_equipoVisitante
  8.         INNER JOIN ligas l ON l.id = a.id_liga
  9.         INNER JOIN pronosticos p ON p.id_jornada = a.id
  10.         INNER JOIN cuotas c ON c.id_jornada = a.id
  11.     WHERE
  12.         a.fecha > CURDATE()
  13.             AND a.fecha <= ADDDATE(NOW(), INTERVAL 1 DAY)
  14.             AND a.resultado IS NULL
  15.             AND GREATEST( p.LOCAL, p.empate, p.visitante) >= 45
  16.     ORDER BY 4) TablaREsultado;
__________________
¿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 12/02/2016, 09:34
 
Fecha de Ingreso: marzo-2012
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Order by máximo de 3 campos juntos

Porque 87 es el mayor de todos los numero que aparece en las filas, luego va el 76, osea de las 3 columnas se busca el mayor y se coloca, no se si me explico

buscar el mayor de cada columna y ordenarlo por filas

Saludos
  #9 (permalink)  
Antiguo 12/02/2016, 09:38
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 máximo de 3 campos juntos

¿Probaste lo que te digo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 12/02/2016, 09:40
 
Fecha de Ingreso: marzo-2012
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Order by máximo de 3 campos juntos

No, lo pruebo en cuanto llegue a casa

Un saludo y gracias
  #11 (permalink)  
Antiguo 13/02/2016, 07:21
 
Fecha de Ingreso: marzo-2012
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Order by máximo de 3 campos juntos

Pues me ha funcionado perfectamente, solo he tenido que añadirle ORDER BY 4 DESC limit 15 y ya esta

Muchísimas gracias de verdad
  #12 (permalink)  
Antiguo 13/02/2016, 07:25
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 máximo de 3 campos juntos

Pon el LIMIT fuera de la subconsulta.
__________________
¿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 15/02/2016, 02:51
 
Fecha de Ingreso: marzo-2012
Mensajes: 17
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Order by máximo de 3 campos juntos

corregido gracias :)

Etiquetas: campo, campos, juntos, order, 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 11:05.