gregor: Lieber viel SQL-Abfragen oder lieber mehr Code?

Hallo!!

Ich habe in einer mysql-Tabelle verschiedene Termien stehen, die in einer Monatsansicht ausgegeben werden sollen.

Eine Möglichkeit währe eine Schleife mit der Anzahl der Tage des Monats zu machen und dann "jeden Tag" eine SQL-Abfrage.
d.h. es würden 31 SQL-Zugriffe pro Seitenaufruf erfolgen.

Eine andere Möglichkeit währe eine SQL-Abfrage die alle Termien des monats enthält zu machen und dann eine Schleife, mit der Anzahl der Tage des Monats, die das SQL-result auf einen Termin für diesen Tag überprüft.

Was ist denn sinvoller? Lieber den PHP-Interpreter mit etlichen Zeilen code zu beschäftigen oder einfach "viele" SQL-statements abzusetzen?

Gruss
Gregor

  1. Hallo

    Ich habe in einer mysql-Tabelle verschiedene Termien stehen, die in einer Monatsansicht ausgegeben werden sollen.

    Eine Möglichkeit währe eine Schleife mit der Anzahl der Tage des Monats zu machen und dann "jeden Tag" eine SQL-Abfrage.
    d.h. es würden 31 SQL-Zugriffe pro Seitenaufruf erfolgen.

    ein höchst ungeschicktes Vorgehen. DB-Aufrufe sind relativ teuer.

    Eine andere Möglichkeit währe eine SQL-Abfrage die alle Termien des monats enthält zu machen und dann eine Schleife, mit der Anzahl der Tage des Monats, die das SQL-result auf einen Termin für diesen Tag überprüft.

    Auch dieses Vorgehen erscheint mir wenig sinnvoll. Da Du die einzelnen Datensätze sowieso der Reihe nach abarbeitest, erfährst Du sowieso, an welchen Tagen kein Termin vorliegt. Du brauchst diese Termine nicht in einer Extra-Schleife zu ermitteln.

    Freundliche Grüße

    Vinzenz

    1. Auch dieses Vorgehen erscheint mir wenig sinnvoll. Da Du die einzelnen Datensätze sowieso der Reihe nach abarbeitest, erfährst Du sowieso, an welchen Tagen kein Termin vorliegt. Du brauchst diese Termine nicht in einer Extra-Schleife zu ermitteln.

      ja, das stimmt, aber ich möchte auch die "leeren" Tage ausgeben.

      oder gibt es einen möglichkeit alles per SQL zu erledigen?
      dass mir quasi ein result mit allen tagen geleifert wird?

      • wahrscheinlich nicht...
      1. Hallo Gregor,

        ja, das stimmt, aber ich möchte auch die "leeren" Tage ausgeben.

        das ist ja kein Problem, dazu solltest Du Dir nur Deine Ausgaberoutine überdenken.

        oder gibt es einen möglichkeit alles per SQL zu erledigen?
        dass mir quasi ein result mit allen tagen geleifert wird?

        Ganz sicher kannst Du Dir ein solches SQL-Statement konstruieren (ein entsprechendes Datenbankmanagementsystem vorausgesetzt), ich sehe das allerdings als nicht besonders sinnvoll an. Dieses einfache Feature solltest Du in der API (d.h. bei Dir in PHP) realisieren.

        Ein weiteres Beispiel:
        Findet an einem Tag mehr als ein Termin statt, so liefert Dir ein normales SQL-Statement für jeden Datensatz diesen Tag zurück. Bei der Ausgabe wird in solchen Fällen oft auf die mehrfache Ausgabe des Datums verzichtet. Auch dies läßt sich in der API einfach realisieren.

        Freundliche Grüße

        Vinzenz

        1. Vielen Dank für deine Antwort!

          Eigentlich habe ich schon eine Lösung, nur dachte ich sie etwas effizienter gestalten zu können.

          Momentan wird eine SQL-Abfrage gestartet, die mit alle Datensätze des Monats ausgibt.
          Dann werden die Datensätze so weiterverarbeitet, dass eine Monatsansicht mit jedem Tag und den dazugehörigen Terminen am Tag angezeigt wird.

          es kam mir nur die idee es in mehrer rekursive-SLQ-Abfragen aufzuteilen und dadurch PHP-code zu sparen...

          1. Hallo Gregor,

            es kam mir nur die idee es in mehrer rekursive-SLQ-Abfragen aufzuteilen und dadurch PHP-code zu sparen...

            nein, das ist keine gute Idee. SQL-Abfragen sind sehr teuer im Vergleich zu ein paar Statements in Programmiersprache XYZ. Denke daran, dass Du z.B. die von Dir benötigte Information in linearer Zeit - ohne jede Schleife - erhalten kannst, dazu mit wenigen Anweisungen. Das ist sehr schnell. Wenn Du statt dessen 28 bis 31 SQL-Statements abzusetzt, so wählst Du die beste Möglichkeit, Server unnötig zu belasten.

            Freundliche Grüße

            Vinzenz