2016-07-25 10 views
3

Ich habe eine phpmyadmin Datenbank mit einer Tabelle "CALENDAR", die die Liste aller Spiele zwischen den Teams enthält.Frage vorhergehende und nächste Übereinstimmung

Das ist die Struktur: ID, TEAM_HOME, TEAM_AWAY, DATE, RESULT_HOME, RESULT_AWAY

Ich brauche eine MySQL-Abfrage, die nur 2 Datensätze zurückgeben zu erstellen: das vorherige Spiel (so, wo die Felder RESULT_HOME und RESULT_AVAY sind <> '0'); das nächste Spiel (das Spiel, das näher gespielt wird).

Bitte, können Sie mir bei der Abfrage helfen? Ich habe mit dieser versucht, aber es ist für mich nicht korrekt:

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 

Wenn Sie weitere Informationen benötigen, mich bitte wissen lassen

+0

Können Sie Tabelle mit Beispieldaten mit erwarteter Ausgabe anzeigen? –

+0

Es ist wie: ID = 1 TEAM_HOME = Italien TEAM_AWAY = Frankreich DATE = 2016.01.07 RESULT_HOME = 85 RESULT_AWAY = 80 – Simone

Antwort

1

habe ich gehe dies:

(SELECT * FROM KALENDER AS C WHERE RESULT_HOME <> 0 und RESULT_AWAY <> 0 ORDER BY C.DATA DESC LIMIT 1)

UNION

(SELECT * FROM KALENDER ALS C WHERE RESULT_HOME = 0 ODER RESULT_AWAY = 0 ORDER BY C.DATA ASC LIMIT 1)

Vielen Dank!

0

, wenn Sie den letzten zwei Spiel zurückkehren wollen? wenn

, dass der Fall versuchen DESC LIMIT 2

+0

ich die letzten beiden Spiele nicht brauchen, ich brauche einen Filter anwenden – Simone

2

die neuesten zu erhalten (in Bezug auf Datum) Spiel mit von null Ergebnissen, die Sie bestellen auf diese Nicht-Null-Ergebnisse, sortiert nach Datum beschränken und die einzige Reihe greifen mit wenn Sie das größte Datum, dh die erste Reihe absteigender Reihenfolge:

SELECT … FROM CALENDAR AS C 
WHERE … AND (RESULT_HOME <> 0 AND RESULT_AVAY <> 0) 
ORDER BY C.DATA DESC 
LIMIT 1 

das gleiche gilt für den umgekehrten Fall: kleinste Date mit einem Null-Ergebnis wäre dies:

SELECT … FROM CALENDAR AS C 
WHERE … AND (RESULT_HOME = 0 OR RESULT_AVAY = 0) 
ORDER BY C.DATA ASC 
LIMIT 1 

Um sie zu einer einzelnen Abfrage zusammenzufassen, können Sie UNION verwenden. Aber ich würde zwei verschiedene Abfragen bevorzugen.

Sortieren nach den verschiedenen Feldern des Datums unabhängig macht nur die Dinge kompliziert für das DBMS, ohne Nutzen. Also sortiere einfach nach Datum.