Liz: Datenbank Abfrage

Halihalo
ich bräuchte mal eure hilfe.

Folgendes Problem.
Ich habe 3 Select Boxen (Jahr, Monat, Mitarbeiter)
im unteren Bereich soll eine Tabelle ausgegeben werden.

Wähle ich nun ein Jahr aus (2006) sollen alle Daten aus der Datenbank gezogen werden von 2006. Nun gibt es da die Möglichkeit das immer weiter einzugrenzen. Wenn ich z.b noch den Monat auswähle (März) sollen nur noch die Daten angezeigt werden die im Jahr 2006 im Monat März vorkamen.

Ich benötige also ein dynamisches SQl Statement. Da es keine Pflich ist alle Select Boxen auszuwählen.

Hoffe ihr könnt mir dabei ein wenig unter die Arme greifen.
Freue mich über jede Antwort
Vielen Dank

  1. Hello,

    Ich benötige also ein dynamisches SQl Statement. Da es keine Pflich ist alle Select Boxen auszuwählen.

    Die Filter-Strings für die Select-Boxen legst Du mittels eines Arrays fest. Auf den Array-Index greifst Du über die Option der Select-Boxen zu. Damit ist gemeint: KEINE SQL-STATEMENTS VOM CLIENT DEFINIEREN LASSEN, sondern lediglich vorgefertigte auswählen lassen.

    $_option1[0] = '';  # default einsetzen
      $_option1[1] = ' and Jahr = 2000';
      $_option1[2] = ' and Jahr = 2001';
      $_option1[3] = ' and Jahr = 2002';

    ... für die anderen entsprechend. Achte auf das führende Leerzeichen.

    $option1 = '';
      if(!empty $_POST['option1'] and isset($_option1[$_POST['option1']])
      {
        $option1 = $_option1[$_POST['option1']];
      }

    $sql =  "... where true  $option1$option2$option3";

    So ungefähr könnte eine Lösung aussehen.
    Das kann man sicher noch stylen und komplexer / universeller aufbauen :-)

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo
      danke für deine schnelle hilfe. Aber leider kann ich die daten nicht fest reinschreiben. Wenn ich z.b einen Selector Jahr und Mitarbeiter habe und diesen auswähle dann muss ich alle Daten zu dem Mitarbeiter im Jahr 2006 haben die Mitarbeiter werden eine seite vorher über eine eingabe Maske in die Datenbank geschrieben. Darum muss es dynamisch sein.

      Gruss
      Liz

      1. Hello Liz,

        danke für deine schnelle hilfe. Aber leider kann ich die daten nicht fest reinschreiben. Wenn ich z.b einen Selector Jahr und Mitarbeiter habe und diesen auswähle dann muss ich alle Daten zu dem Mitarbeiter im Jahr 2006 haben die Mitarbeiter werden eine seite vorher über eine eingabe Maske in die Datenbank geschrieben. Darum muss es dynamisch sein.

        Dagegen ist auch nichts einzuwenden. Aber auf dem Server sind die Daten doch ohnehin bekannt. Also bau Sie Dir auch dort zusammen, und nicht auf dem Client. Auf dem Client wählst Du nur Indizes in die erlaubten Daten auf dem Server aus, so wie gezeigt.

        Das kann man selbstverständlich auch hierarchisch staffeln.
        Du brauchst also als erstes einen Workflow für deine Formularhierarchie.

        z.B.:

        Stufe 0: verfügbare Mitarbeiter abfragen und anzeigen lassen
            Stufe 1: Mitarbeiter auswählen und Daten für Stufe 2 abfragen und anzeigen
              Stufe 2: Jahr auswählen und Daten für Stufe 3 abfragen und anzeigen
                Stufe 3: Monat auswählen und Ergebnis berechnen und anzeigen
                         Link zurück zum Anfang nicht vergessen

        Man kann auch für jede Stufe ein Form einbauen.
          Bei Stufe 1 ist nur das Form für Mitarbeiter sichtbar
          Bei Stufe 2 sind Mitarbeiter und Jahr sichtbar
          Bei Stufe 3 sind Mitarbeiter, Jahr und Monat sichtbar
          Bei Stufe 4 sind Ergebnis der Abfrage, Mitarbeiter, Jahr und Monat sichtbar

        Wenn in Stufe 4 ein Post über Mitarbeiter geführt wird, muss man eben entsprechend auf Stufe 2 (als Ergebnis des Posts) zurückschalten. Eventuell ist bei dynamischen Daten für die Mitarbeiter auch ein Butten für den Rücksprung zu Stufe (0 -> 1) notwendig.

        Ich hoffe, Du konntest mir folgen.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Ich dachte man könnte das ganze irgendwie mit If Statements machen!?
          Wenn die SelectBox Jahr ausgewählt ist merke ich mir den Wert in einer Variable unsw. Und am Ende habe ich dann ein SQL Statement wo ich dann mit Where alles abfragen kann??????

          1. Hello,

            Ich dachte man könnte das ganze irgendwie mit If Statements machen!?
            Wenn die SelectBox Jahr ausgewählt ist merke ich mir den Wert in einer Variable unsw. Und am Ende habe ich dann ein SQL Statement wo ich dann mit Where alles abfragen kann??????

            Du betreibst doch ein Auswahlverfahren, bei dem die Ergebnismenge immer weiter eingeschränkt wird, oder? Ich habe das so verstanden:

            - Am Anfang weißt Du nichts
              - Du rufst ein Dokument auf, dass alle verfügbaren Mitarbeiter sucht
                und in einer Select-Box zur Auswahl stellt
              - Du wählst einen Mitarbeiter aus
                Es wird eine Select-Box mit den nur für diesen Mitarbeiter zutreffenden
                Jahreszahlen zusätzlich angezeigt, also nicht alle Jahre, sondern nur
                diejenigen, die auch Daten für diesen MA liefern werden
              - Du wählst zusätzlich zum MA nun das Jahr aus
                Es wird geschaut, für welche Monate der MA in dem gewählten Jahr Daten hat
                und die Monate werden angezeigt in einer weiteren Selectbox
              - Du kannst nun noch den Monat bestimmen und das Endergebnis berechnen lassen

            Hatte ich das verkehrt verstanden?

            Hierarchische Methoden zur Datenmengenauswahl benötigen ein Ping-Pong zwischen Server und Client. Anders geht das nicht, wenn man nicht die gesamte Datenmenge zum Client schaffen will. Und darum geht es doch meistens.

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

    2. Tag guten!

      Ich würd' mal sagen: Wieso einfach, wenn's auch kompliziert geht?!
      Das gesamtproblem wird meiner Meinung nach total falsch angegangen.

      Die meisten Datenbanken bieten tolle Datumsfunktionen an, in MySQL gibt es meines wissens ein DATETIME, welches sich ohne probleme mit NOW() oder autoincrement füllen lässt.
      außerdem gibt es eine WHERE Klausel sowie die Operatoren '<' '=' und '>'.

      Das sollte jetzt ein kleiner Denkanstoß sein, überdenkt doch nochmal Eure Datenbank-Querys.

      Gruß, der Hilker