ich verzweifle an einer Abfrage... ich habe ein Datenbank für die Wettkampfresultate in unserem Laufsport-Verein erstellt. Sie sieht etwa so aus:
- Code: Select all
CREATE TABLE Mitglied
(
ID INT NOT NULL AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL,
Vorname VARCHAR(255) NOT NULL,
...
CONSTRAINT Mitglied_PK PRIMARY KEY (ID)
)ENGINE=InnoDB;
CREATE TABLE Strecke
(
ID INT NOT NULL AUTO_INCREMENT,
VeranstaltungID INT NOT NULL,
StreckentypID int,
Belag TEXT,
Distanz DOUBLE,
Profil VARCHAR(255),
Hoehenmeter VARCHAR(255),
Anmerkungen TEXT,
CONSTRAINT Strecke_PK PRIMARY KEY (ID),
CONSTRAINT Strecke_Veranstaltung_FK FOREIGN KEY (VeranstaltungID) REFERENCES Veranstaltung(ID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT Strecke_Streckentyp_FK FOREIGN KEY (StreckentypID) REFERENCES Streckentyp(ID) ON UPDATE CASCADE
)ENGINE=InnoDB;
CREATE TABLE Kategorie
(
ID INT NOT NULL AUTO_INCREMENT,
AnlassID INT NOT NULL,
StreckeID INT NOT NULL,
KategorieBez VARCHAR(255),
Herrenkat BOOLEAN,
CONSTRAINT Kategorie_PK PRIMARY KEY (ID),
CONSTRAINT Kategorie_Anlass_FK FOREIGN KEY (AnlassID) REFERENCES Anlass(ID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT Kategorie_Strecke_FK FOREIGN KEY (StreckeID) REFERENCES Strecke(ID) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB;
CREATE TABLE Resultat
(
ID INT NOT NULL AUTO_INCREMENT,
Tage INT,
Zeit TIME,
KategorieID INT NOT NULL,
MitgliedID INT NOT NULL,
Rang INT,
RangKat INT,
Bemerkung TEXT,
LinkText VARCHAR(255),
LinkUrl TEXT,
Geprueft BOOLEAN,
CONSTRAINT Resultat_PK PRIMARY KEY (ID),
CONSTRAINT Resultat_Kategorie_FK FOREIGN KEY (KategorieID) REFERENCES Kategorie(ID) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT Resultat_Mitglied_FK FOREIGN KEY (MitgliedID) REFERENCES Mitglied(ID) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB;
Strecke.StreckentypID gibt an von welchem Typ die Strecke ist. '5' steht z.B. für Marathon, '2' für einen 10km-Wettkampf.
Ich möchte nun die Vereinsbestzeit auf der Marathon-Distanz abfragen. Ich habe es so versucht:
- Code: Select all
SELECT Resultat.Zeit, Resultat.ID, Resultat.MitgliedID
FROM (
Strecke
INNER JOIN Kategorie ON Strecke.ID = Kategorie.StreckeID
)
INNER JOIN Resultat ON Kategorie.ID = Resultat.KategorieID
WHERE (
(
(Strecke.StreckentypID) =5
)
AND ((Kategorie.Herrenkat) = True)
)
ORDER BY `Resultat`.`Zeit` ASC
Das gibt mir die folgende Ausgabe:
Resultat.Zeit Resultat.ID Resultat.MitgliedID
02:37:59 1775 292
02:38:18 1194 78
02:39:04 476 78
02:39:58 1789 78
02:39:58 833 78
02:40:11 99 78
02:40:22 1084 78
02:40:38 477 160
02:41:08 646 78
02:43:05 1507 78
Natürlich möchte ich jedes Mitglied nur einmal in der Liste drin haben, nähmlich diejenige Zeile mit der besten Zeit. In diesem Beispiel wäre der einzig interessante Eintrag für Mitglied mit ID '78': Zeit: 02:38:18, ResId: 1194.
Wie kriege ich diese Abrage hin?
Vielen Dank für's Helfen!