Announcement

Collapse
No announcement yet.

Join mit zwei WHERE-Bedingungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Join mit zwei WHERE-Bedingungen

    Hallo,

    ich habe jetzt soviel probiert, aber ich komme nicht weiter. Vielleicht geht es auch gar nicht.

    Es ist auf einer MySQL 4.0.24 und ich benötige drei Tabellen für ein Tipspiel.

    Tab1 enthält die Tipper
    | nickID | nick |

    Tab3 enthält die Tips
    | tipsID | spieltag | saisonID | ... | nickID |

    Solange ich nur eine Saison hatte klappte es gut. Mit

    SELECT DISTINCT nick FROM Tab1 LEFT JOIN Tab3 ON Tab1.nickID=Tab3.nickID AND spieltag=$spieltag AND saisonid=$sasid WHERE Tab3.nickID IS NULL

    konnte ich mir alle nicks anzeigen lassen, die den aktuellen Spieltag noch nicht getippt haben.

    In der neuen Saison ist eine weitere Tabelle hinzugekommen.

    Tab2 ist eine Verknüpfung von Tipper und Saison
    | saisonID | nickID |
    |........ 1 ......|....... 1 .. |
    |........ 1 ......|....... 2 .. |
    |........ 1 ......|....... 3 .. |
    |........ 2 ......|....... 1 .. |
    |........ 2 ......|....... 2 .. |

    Tipper Nr. 3 macht in dieser Saison nicht mehr weiter. Nun möchte ich mir mit einer Abfrage wieder die nicks anzeigen lassen, die den aktuellen Spieltag noch nicht getippt haben. Ich habe alles mögliche probiert, aber nie kam das richtige Ergebnis dabei raus. Meist wurde mir immer noch der Tipper Nr. 3 mit angezeigt, denn die Abfrage geht ja über die gesamte Tabelle. Mit WHERE saisonID=2 läßt sie sich nicht mehr einschränken. Und sonst kam oft ein leeres Ergebnis zurück, weil "WHERE Tab3.nickID IS NULL" ja für sich allein stehen muß.

    Die Abfrage an sich kann ja nicht so kompliziert sein. Gibt es da ein Trick, bin ich auf dem Holzweg?

  • #2
    Jetzt habe ich es doch noch geschafft.

    SELECT nick
    FROM Tab2
    LEFT JOIN Tab1 ON Tab1.nickID = Tab2.nickID
    LEFT JOIN Tab3 ON Tab1.nickID = Tab3.nickID
    AND spieltag =$spieltag
    WHERE Tab3.nickID IS NULL
    AND Tab2.saisonid =$sasid

    Komisch, ich meinte auch diese Möglichkeit ausprobiert zu haben. Aber wahrscheinlich habe ich bei der WHERE-Abfrage immer nur nach Tab3.saisonid gefragt und wenn die Bedingung Tab3.nickID IS NULL ist muß ja das Ergebnis eine leere Menge sein.

    Die Abfrage dauert recht lange im Vergleich zu den anderen. Gibt es da vielleicht noch Optimierungsmöglichkeiten

    Comment

    Working...
    X