Rainer: JOIN, LEFT JOIN oder was anderes und wie?

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

  1. 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

    UNION DISTINCT

    weiterhelfen (DISTINCT ist Standard, kannst Du daher weglassen).

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzent,

      Verstehe ich Dich richtig, dass bei den Daten oben Dein gewünschtes Ergebnis

      599
      600
      644
      645

      wäre?

      Genau das soll herauskommen

      Wenn ja, sollte Dir

      UNION DISTINCT

      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

      1. Hallo,

        Genau das soll herauskommen

        Wenn ja, sollte Dir

        UNION DISTINCT

        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

  2. 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

    1. 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