chefsalat-
Mitglied
Hallo zusammen,
ich habe folgende Ausgangssituation:
Tabelle User:
ID | Vorname... | Nachname........ | Jahrgang | Geschlecht
1..| Hans.......... | Mustermann...... | 1993....... | m
Tabelle F50:
ID | UID | WID | Zeit
1..| 1......| 1......| 003012
2..| 1......| 1......| 002956
3..| 1......| 2......| 002902
4..| 1......| 1......| 003122
Tabelle F100:
ID | UID | WID | Zeit
1..| 1......| 1......| 010632
1..| 1......| 1......| 010533
1..| 1......| 2......| 010498
1..| 1......| 1......| 010699
Tabelle Wettkämpfe:
ID | Ort............... | Datum...... | Bahn
1..| Musterstadt...| 2007-05-12 | 25
2..| Musterstadt...| 2006-04-23 | 50
So, jetzt versuche ich, eine Abfrage zu erstellen, die für alle User die Tabellen F50 und F100 durchgeht (User.ID = F50.UID bzw User.ID = F100.UID).
Für jeden User soll die minimale Zeit (Min(F50.Zeit) bzw Min(F100.Zeit)) ermittelt werden, aber nur für die Wettkämpfe (F50.WID = Wettkämpfe.ID bzw F100.WID = Wettkämpfe.ID), die auf einer 25m Bahn bewältigt wurden (where Wettkämpfe.Bahn=25).
Es soll so aussehen:
Vorname... | Nachname........ | Jahrgang | F50....... | F100..... | Bahn
Hans.......... | Mustermann..... | 1993........ | 002956 | 010533 | 25
Ich habe es schon mit einer Abfrage, die mit mehreren left-join verknüpft ist, versucht, aber nirgends komme ich zum gewünschten Ergebnis.
Das mit dem Minimum von F50 und F100 klappt soweit, nur das verknüpfen mit der Bahn passt noch nicht.
Mein großes Problem ist, das ich nicht weiß, wie das left-joinen mit gleichzeitiger Abfrage auf die Bahnlänge hinbekomme.
Hier ist meine Abfrage:
select S.Vorname, S.Nachname, S.Jahrgang as Jhg, Min(F50.Zeit) as F50, Min(F100.Zeit) as F100, W.Bahn
from User S
left join F50 on S.ID=F50.SID
left join F100 on S.ID=F100.SID
left join Wettkämpfe W on F50.WID=W.ID
where S.Geschlecht='m' and W.Bahn=25
group by S.Nachname
Wenn ich einen User habe, der bei F100 nur auf einer 50m Bahn gestoppt wurde, wird mit meiner erstellen Abfrage trotzdem die eingetragene 50m Zeit angezeigt.
Stimmt eigentlich schon, da ich F100 ja nicht überprüfe.
Und hier liegt mein Problem:
Wie überprüfe ich bei F50 als auch bei F100, ob die jeweils eingetragene WID von einer 25m Bahn stammt?
Ich möchte das ganze als eine Art Bestzeitenliste erstellen.
Die einzelnen Zeiten stehen wie beschrieben mit User-Id und Wettkampf-Id in den verschiedenen Tabellen.
Es sollen zwei Bestzeitenlisten werden: Eine von der 25m Bahn und eine von der 50m Bahn.
Mein verwendetes System: WinXP + MySQL Query Browser
Ich wäre super dankbar, wenn mir jemand weiterhelfen könnte. Ich bin jetzt schon zwei Tage an diesem Problem.
Gruß chefsalat-
ich habe folgende Ausgangssituation:
Tabelle User:
ID | Vorname... | Nachname........ | Jahrgang | Geschlecht
1..| Hans.......... | Mustermann...... | 1993....... | m
Tabelle F50:
ID | UID | WID | Zeit
1..| 1......| 1......| 003012
2..| 1......| 1......| 002956
3..| 1......| 2......| 002902
4..| 1......| 1......| 003122
Tabelle F100:
ID | UID | WID | Zeit
1..| 1......| 1......| 010632
1..| 1......| 1......| 010533
1..| 1......| 2......| 010498
1..| 1......| 1......| 010699
Tabelle Wettkämpfe:
ID | Ort............... | Datum...... | Bahn
1..| Musterstadt...| 2007-05-12 | 25
2..| Musterstadt...| 2006-04-23 | 50
So, jetzt versuche ich, eine Abfrage zu erstellen, die für alle User die Tabellen F50 und F100 durchgeht (User.ID = F50.UID bzw User.ID = F100.UID).
Für jeden User soll die minimale Zeit (Min(F50.Zeit) bzw Min(F100.Zeit)) ermittelt werden, aber nur für die Wettkämpfe (F50.WID = Wettkämpfe.ID bzw F100.WID = Wettkämpfe.ID), die auf einer 25m Bahn bewältigt wurden (where Wettkämpfe.Bahn=25).
Es soll so aussehen:
Vorname... | Nachname........ | Jahrgang | F50....... | F100..... | Bahn
Hans.......... | Mustermann..... | 1993........ | 002956 | 010533 | 25
Ich habe es schon mit einer Abfrage, die mit mehreren left-join verknüpft ist, versucht, aber nirgends komme ich zum gewünschten Ergebnis.
Das mit dem Minimum von F50 und F100 klappt soweit, nur das verknüpfen mit der Bahn passt noch nicht.
Mein großes Problem ist, das ich nicht weiß, wie das left-joinen mit gleichzeitiger Abfrage auf die Bahnlänge hinbekomme.
Hier ist meine Abfrage:
select S.Vorname, S.Nachname, S.Jahrgang as Jhg, Min(F50.Zeit) as F50, Min(F100.Zeit) as F100, W.Bahn
from User S
left join F50 on S.ID=F50.SID
left join F100 on S.ID=F100.SID
left join Wettkämpfe W on F50.WID=W.ID
where S.Geschlecht='m' and W.Bahn=25
group by S.Nachname
Wenn ich einen User habe, der bei F100 nur auf einer 50m Bahn gestoppt wurde, wird mit meiner erstellen Abfrage trotzdem die eingetragene 50m Zeit angezeigt.
Stimmt eigentlich schon, da ich F100 ja nicht überprüfe.
Und hier liegt mein Problem:
Wie überprüfe ich bei F50 als auch bei F100, ob die jeweils eingetragene WID von einer 25m Bahn stammt?
Ich möchte das ganze als eine Art Bestzeitenliste erstellen.
Die einzelnen Zeiten stehen wie beschrieben mit User-Id und Wettkampf-Id in den verschiedenen Tabellen.
Es sollen zwei Bestzeitenlisten werden: Eine von der 25m Bahn und eine von der 50m Bahn.
Mein verwendetes System: WinXP + MySQL Query Browser
Ich wäre super dankbar, wenn mir jemand weiterhelfen könnte. Ich bin jetzt schon zwei Tage an diesem Problem.
Gruß chefsalat-
Zuletzt bearbeitet: