Ankündigung

Einklappen
Keine Ankündigung bisher.

arbeite das erstemal mit mehr als einer Tabelle und:

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • arbeite das erstemal mit mehr als einer Tabelle und:

    .. bekomme es einfach nicht geregelt.
    Kurze Erläuterung:
    Ich habe hier mal 2 Tabellen: Teilnahmen, Events
    Zusätzlich habe ich einen Zeitraum in 2 Variablen festgelegt.
    ( zB: begin 2005-10-30 und end 2006-11-01 )

    In der Teilnahmetabelle stehen alle Teilnahmen der User bei einem Event. Hier sind "nur" die IDs gespeichert, die wiederum in die anderen Tabellen verweisen. Also zB: id, Event, Teilnehmer - ( 1, 3, 44 )
    Über diese IDs greife ich dann auf den Datensatz in den anderen Tabellen zu.

    In der Events-tabelle stehen die Events, die es bislang gab.
    zB: id, Name, Datum, Ort - ( 1, Testevent, 2006-2-10 )

    Wie müsste meine Abfrage lauten, wenn ich aus meiner Teilnahme-Tabelle NUR die Datensätze haben will, wo das Datum, was ja in der Events-Tabelle steht, im Zeitraum zwischen "begin" und "end" ist?

    Derzeit sieht es so bei mir aus: ( * kann ja noch geändert werden )
    PHP-Code:
    SELECT 
    FROM Teilnahmen LEFT JOIN Events ON (Teilnahmen.Event Events.id)
    WHERE Events.Datum BETWEEN ".$data["begin"]." AND ".$data["end"]." 
    Es kommt keine Fehlermeldung aber sobald ich das mit dem Datum reinnehme, zeigt er mir überhauptkeinen Datensatz mehr an.
    Ich hoffe ihr kommt in etwa mit.

    Mario

  • #2
    Hallo,
    du musst dann darauf achten, dass dein Datums-Spaltentyp auch DATE
    ist. Das scheint ja nicht der Fall zu sein, wenn auch - wie du oben
    geschrieben hast - 2006-2-10 drin steht. Dadurch verhunzt du die Sortierung.
    Es muss 2006-02-10 heißen.
    Außerdem müssen deine Datums-Variablen natürlich in Anführunszeichen
    stehen, das ist bei dir nicht der Fall.

    Wie sieht dein erzeugter SQL-Befehl denn am Ende aus? (mit
    interpretierten PHP-Variablen!
    )

    Kommentar


    • #3
      Hallo Zergling,

      Sorry ich habe mich nur verschrieben.
      Das Feld IST ein DATE Feld.

      Hier ist der Interpretierte Befehl:
      PHP-Code:
      SELECT FROM Teilnahmen LEFT JOIN Events ON (Teilnahmen.Event Events.idWHERE Events.Datum BETWEEN 2007-11-01 AND 2008-10-30 
      Ich vermute es liegt auch immernoch an diesem.
      Das Teilnahmedatum des Users ist hier zB. 2008-02-10 und müsste so auch zwischen dem begin und end datum liegen.
      Ich vermute meinen Fehler in der Angabe der Datumsspalte direkt hinter dem WHERE. Theoretisch müsste da ja folgendes stehen.
      ... WHERE Events.ID=Teilnahmen.Event und wenn es so ist, dann schreibe hier den Inhalt von Events.Datum hin ... BETWEEN usw....
      Also statt "Events.Datum" sollte dort 2008-2-12 stehen.

      Mario

      Kommentar


      • #4
        Zitat von Zergling
        Außerdem müssen deine Datums-Variablen natürlich in
        Anführunszeichen stehen, das ist bei dir nicht der Fall.
        ...denn "2007-11-01 AND 2008-10-30" entspricht "1995 AND 1968"

        Kommentar


        • #5
          ... denn "2007-11-01 AND 2008-10-30" entspricht "1995 AND 1968" ...
          Du meinst es entspricht diesen Werten, wenn ich KEINE Anführungszeichen setze?
          Wenn ja warum gerade DIESE Werte?

          Mario

          Kommentar


          • #6
            Zitat von GELight
            ... denn "2007-11-01 AND 2008-10-30" entspricht "1995 AND 1968" ...
            Du meinst es entspricht diesen Werten, wenn ich KEINE Anführungszeichen setze?
            Genau das meint er.
            Wenn ja warum gerade DIESE Werte?
            2007 - 11 - 1 = 1995

            Woher soll MySQL denn wissen, daß das ein Datum und keine Rechenaufgabe sein soll?

            Kommentar


            • #7
              Ach so... jetzt hab ich euch verstanden.
              Jetzt klingts auch logisch. Klar, dass er dann einen Fehler machen würde.
              Habe aber wie gesagt nur hier im Forum einen Schreibfehler gemacht. In der DB und meinem Dcript stehen die korrekten Werte.

              Wir haben diese Sache mit Umwegen jetzt hinbekommen.
              So 100% Glücklich bin ich aber nicht damit, da wir ziemlich viele SQL Befehle in verschiedenen Abfragen ausführen und ich mir denke, dass man sehr viel einfacher fahren kann, wenn der SQL Befehl besser ist.

              Daher habe ich mal hier noch eine Frage oder auch Bitte.
              Um die Joins besser verstehen zu können(sovern ich diese hier brauche) hätte ich gern mal einen SQL Befehl für eine weitere Sache, an der ich gerade sitze.(hängt damit zusammen).
              In einem anderen Post gabs einen Tip, dass man sich das so wie man es ausspricht, aufschreiben kann um einen besseren überblick zu bekommen.

              Hier ist mein ein Teil der DB Struktur um es zu verdeutlichen.

              Wie müsste dann mein Befehl aussehen, wenn ich sage:

              ... Gib mir alle alle Klassen aus der Tabelle Klassen
              WO die Mitgliedsnummer aus der Teilnehmertabelle gleich der aktuellen Mitgliedsnummer ist
              UND wo das Datum der jeweiligen Teilnahme, welches über die EventID in der Tabelle Teilnahmen auf das Datum in der Tabelle Events zugreift, zwischen saisonBEGIN und saisonEND liegt

              Bisher sieht er so aus...
              PHP-Code:
              SELECT `Name`
              FROM `dbcup_Klassen`
              WHERE id='".$teilnahme["Klasse"]."' 
              Diese Abfrage liegt in einer WhileSchleife. Daher habe ich auch schon die
              korrekte Klasse zur Teilnahme. Ich bekomm nur nicht hin das Datum aus der Eventtabelle mit einzubinden in der Abfrage.
              Ich glaube aber, dass ich wohl garnicht wie jetzt direkt über die Klassentabelle gehen kann oder?

              Mario

              Kommentar

              Lädt...
              X