una soporta segundo rapida por optimizar optimizacion mas lentas hacer cuantas consultas consulta como agilizar php mysql phpmyadmin

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