JOIN, LEFT JOIN oder was anderes und wie?
Rainer
- datenbank
Hallo,
habe folgende tabelle (MySQL5)
ID,liga,Spieler1,Spieler2
Daten:
1,14,644,599
2,14,645,600
3,14,644,600
4,14,599,645
SQL:
$sql1 = "SELECT Spieler1,Spieler2 FROM einzeltest WHERE liga = '14' GROUP BY Spieler1";
$res1 = mysql_query($sql1);
$z1Anz = mysql_num_rows($res1);
gibt 3 aus, stimmt also erst mal. Ich muss aber die ID's _aller_ Spieler1 _und_ Spieler2 aus liga Nr.14 in eine Schleife bekommen (Nr.600 fehlt hier natürlich):
while($z = mysql_fetch_row($res1)):
echo"$z[0]<br />";
endwhile;
!aber! jede Spielernummer darf nur 1x in der Schleife vorkommen, egal ob sie in der Spalte Spieler1 oder Spieler2 steht.
Habe im Moment überhaupt keinen Ansatz wie das zu Lösen wäre.
Gruß Rainer
Hallo,
habe folgende tabelle (MySQL5)
ID,liga,Spieler1,Spieler2
Daten:
1,14,644,599
2,14,645,600
3,14,644,600
4,14,599,645
soweit schon mal gut. Den Rest hab' ich einfach ignoriert, weil ich nicht verstanden habe, was Du damit willst.
!aber! jede Spielernummer darf nur 1x in der Schleife vorkommen, egal ob sie in der Spalte Spieler1 oder Spieler2 steht.
Verstehe ich Dich richtig, dass bei den Daten oben Dein gewünschtes Ergebnis
599
600
644
645
wäre?
Habe im Moment überhaupt keinen Ansatz wie das zu Lösen wäre.
Wenn ja, sollte Dir
weiterhelfen (DISTINCT ist Standard, kannst Du daher weglassen).
Freundliche Grüße
Vinzenz
Hallo Vinzent,
Verstehe ich Dich richtig, dass bei den Daten oben Dein gewünschtes Ergebnis
599
600
644
645wäre?
Genau das soll herauskommen
Wenn ja, sollte Dir
weiterhelfen (DISTINCT ist Standard, kannst Du daher weglassen).
Danke für den Link nur ist weder mein Englisch noch mein derzeitiger Kenntnissstand von MySQL das dort stehende zu begreifen. Gibt es irgendwo eine Erklärung oder Beispiele auf deutsch oder die ich anhand der Query und dargestellten Ergebnisse nachvollziehen kann?
Gruß Rainer
Hallo,
Genau das soll herauskommen
Wenn ja, sollte Dir
weiterhelfen (DISTINCT ist Standard, kannst Du daher weglassen).
Danke für den Link nur ist weder mein Englisch noch mein derzeitiger Kenntnissstand von MySQL das dort stehende zu begreifen.
dann solltest Du dem Erwerb von Englisch-Kenntnissen eine hohe Priorität einräumen. Viele Doku bekommst Du nur auf Englisch oder nur die englische Doku ist brauchbar, siehe z.B. die däml^w lustigen automatisierten Übersetzungen bei Microsoft. Technisches Englisch ist zudem nicht besonders schwer. Du sollst ja nicht in gutes Deutsch übersetzen, sondern verstehen, was da steht.
Nun gibt es auf der von mir verlinkten Seite einen Hinweis auf zusätzliche Sprachen (da ist German nicht dabei). Wenn Du zur Version 5.1 wechselst, findest Du sogar eine deutsche Version.
Warum verlinke ich nicht diese?
Erstens ist derzeit MySQL 5.0 die aktuelle Produktionsversion, zweitens ist die deutsche Übersetzung nicht so ausführlich und gelegentlich schleichen sich auch Fehler ein. Drittens gehe ich davon aus, dass ein Fragesteller in der Lage ist, englische Dokumentation zu lesen - wenn er nicht explizit darauf hingewiesen hat, dass er es nicht kann.
Das Statement für Deinen speziellen Fall hat Dir Frank ja bereits gepostet.
Freundliche Grüße
Vinzenz
Hallo,
ID,liga,Spieler1,Spieler2
Daten:
1,14,644,599
2,14,645,600
3,14,644,600
4,14,599,645
SQL:
$sql1 = "SELECT Spieler1,Spieler2 FROM einzeltest WHERE liga = '14' GROUP BY Spieler1";
Ganz schlecht, wie kannst du Spieler2 selektieren, wenn du nach Spieler 1 gruppierst? Wozu überhaupt GROUP BY?
Du machst einen (eigentlich DEN) typischen Anfängerfehler mit MySQL. Jedes andere Datenbanksystem würde bei deiner Abfrage streiken. Und das wäre auch gut so.
Warum selektierst du nicht
SELECT DISTINCT Spieler1 -- alle einmaligsten Spieler1 Werte
FROM einzeltest
WHERE liga = 14 -- ich hoffe, du hast Liga nicht als Text gespeichert?
UNION DISTINCT -- wenn schon im oberen SELECT vorhanden, dann nicht nochmal
SELECT DISTINCT Spieler2 -- alle einmaligsten Spieler1 Werte
FROM einzeltest
WHERE liga = 14 -- ich hoffe, du hast Liga nicht als Text gespeichert?
gibt 3 aus, stimmt also erst mal. Ich muss aber die ID's _aller_ Spieler1 _und_ Spieler2 aus liga Nr.14 in eine Schleife bekommen (Nr.600 fehlt hier natürlich):
Nummer 600 soll fehlen oder darf nicht fehlen?
Ciao, Frank
Hallo Frank,
ja, die Nummer 600 darf nicht fehlen. Danke für die Anleitung. ich weiss - hier gilt das "self" - Prinzip, aber genau so wie du es gezeigt hast kann ich das daraus lernen was ich für den evtl. nächsten Fall brauche. Nun weiss ich wo ich das UNION DISTINCT einsetzen muss.
Danke nochmals, so funktioniert es einwandfrei.
Gruß Rainer