php - soporta - optimizar consultas lentas mysql
Consulta anterior y siguiente partido (3)
Tengo una base de datos phpmyadmin con una tabla "CALENDARIO", que contiene la lista de todos los juegos entre equipos.
Esta es la estructura: ID, TEAM_HOME, TEAM_AWAY, DATE, RESULT_HOME, RESULT_AWAY
Necesito crear una consulta mysql que devuelva solo 2 registros: el juego anterior (por lo que los campos RESULT_HOME y RESULT_AVAY son <> ''0''); el próximo juego (el juego que se jugará más cerca).
Por favor, ¿me pueden ayudar con la consulta? Lo he intentado con este, pero no es correcto para mí:
SELECT C.*
FROM CALENDAR AS C
WHERE C.DATA BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL ''7'' DAY) AND CURRENT_DATE
ORDER BY YEAR(C.DATA) ASC, MONTH(C.DATA) ASC, DAY(C.DATA) ASC
LIMIT 2
Si necesita más detalles, por favor hágamelo saber
He ir esto:
(SELECCIONAR * DESDE EL CALENDARIO COMO C DONDE RESULT_HOME <> 0 Y RESULT_AWAY <> 0 ORDENAR POR C.DATA DESC LIMIT 1)
UNIÓN
(SELECCIONAR * DESDE EL CALENDARIO COMO C DONDE RESULT_HOME = 0 O RESULT_AWAY = 0 ORDER BY C.DATA ASC LIMIT 1)
¡Gracias!
Para obtener el último juego (en términos de fecha) con resultados distintos de cero, ordene restringir a esos resultados distintos de cero, ordenar por fecha y tomar la única fila con la fecha más grande, es decir, la primera fila si ordena descendente:
SELECT … FROM CALENDAR AS C
WHERE … AND (RESULT_HOME <> 0 AND RESULT_AVAY <> 0)
ORDER BY C.DATA DESC
LIMIT 1
Del mismo modo para el caso contrario: la fecha más pequeña con un resultado cero sería esta:
SELECT … FROM CALENDAR AS C
WHERE … AND (RESULT_HOME = 0 OR RESULT_AVAY = 0)
ORDER BY C.DATA ASC
LIMIT 1
Para combinarlos en una sola consulta, puede usar un UNION
. Pero preferiría dos consultas distintas.
Clasificar por los diferentes campos de la fecha de forma independiente solo complica las cosas para el DBMS, sin ningún beneficio. Así que solo ordena por fecha.
si quieres devolver los dos últimos juegos?
si ese es el caso, intente DESC LIMIT 2