Reiner: Ist der Oktober länger als andere Monate?

Hallo,

bei Schlund gibt es einen DB-Timeout von 120 Sek.
Ich habe mein Script darauf angepaßt und breche es nach 110 Sek. ab.
Nun stelle ich fest, daß manche Monate fehlen (wegen dem TimeOut), aber der Oktober ist NIE vorhanden. Und das gilt generell für nur für diesen Monat.

Falls jetzt jemand die Vermutung äußern will, mein Script hat da wohl eine Macke, d.h. der select wäre falsch:

Mit PHPMyAdmin habe ich den gleichen Effekt.

Hat jemand sowas komisches schonmal erlebt?
Kann doch kein Zufall sein, oder?

Oder könnte das einen Grund haben?

Reiner

  1. Seid gegruesst!

    Vielleicht benötigt er ein IQ-Upgrade? Wie kommt er darauf, daß unsere Lordschaft mittels magischer Kräfte erraten werden, was er in seinem Skript falsch gemacht hat, welche Datenbank er benutzt, und so weiter?
    Verrate er den Quellcode des Skriptes, und unsere Lordschaft werden eventuell belieben, einen Blick darauf zu werfen, um herauszufinden, warum er Probleme mit dem Oktober hat.
    Wenn Schlund sein Skript sowieso abbricht, warum bricht er es dann selbst ab? Wenn er einen Server bei dyndns.org hat, warum lässt er nicht dort seine Datenbank laufen?

    Lord Helmchen

    1. Guten Morgen auch,

      Vielleicht benötigt er ein IQ-Upgrade? Wie kommt er darauf, daß unsere Lordschaft mittels magischer Kräfte erraten werden, was er in seinem Skript falsch gemacht hat, welche Datenbank er benutzt, und so weiter?

      es ist MySQL (->Schlund hat nur das!) und völlig unwesentlich!
      Genauso wie die Frage nicht nach Scriptfehlern oder dergleichen war.

      Verrate er den Quellcode des Skriptes, und unsere Lordschaft werden eventuell belieben, einen Blick darauf zu werfen, um herauszufinden, warum er Probleme mit dem Oktober hat.

      Es geht NICHT um das Script!
      Wenn Du das wirklich gelesen hast und weißt, was PHPMyAdmin ist, hättest Du das auch nicht geschrieben!

      Wenn Schlund sein Skript sowieso abbricht, warum bricht er es dann selbst ab? Wenn er einen Server bei dyndns.org hat, warum lässt er nicht dort seine Datenbank laufen?

      Das Script breche ich ab, weil Schlund zu d..f ist, das selbst zu managen. Um Ärger aus dem Weg zu gehen (die haben Scripte auch schon einfach mal komplett auf chmod 000 gestellt und mit chown root völlig unbrauchbar gemacht, toll!), breche ich mittels alarm einfach selbst ab.

      Und der Server unter dyndns ist meiner... das hat weder was mit der Frage zu tun, noch kann man damit ein brauchbares Projekt auf die Beine stellen.

      Aber Hauptsache, Du hast Deinen Senf dazugegeben, was?

      Geh besser schlafen!
      Das mache ich jetzt nämlich auch!

      Cu,
      Reiner

      1. Seid gegruesst!

        In der Tat haben unsere Lordschaft keine Ahnung von myPHPadmin - es wird aber wohl ein Frontend für eine mySQL Datenbank sein? Unsere Lordschaft haben schon genug Datenbanken mit SQL-Konsolen verwaltet.
        Trotzdem erscheint es grotesk, dass er annimmt, man könne ihm helfen, wenn er sowohl die Struktur seiner Datenbank (Wie hängen die Datensätze voneinander ab? Wie groß ist die Datenbank?) als auch das Statement, das sowohl im Skript als auch in der SQL-Konsole nicht funktionieren soll, nicht nennen will.
        Wenn er so davon überzeugt ist, dass sein SQL-Statement richtig ist, warum fragt er dann? Glaubt er wirklich, dass mySQL einen "Oktober-Bug" haben könnte?
        Unserer Lordschaft deucht, er hält die Forumsteilnehmer weiterhin für Hellseher.
        Was erwartet er denn, was man auf sein Ursprungsposting antworten soll? "Ja" / "Nein" / "Weiss nicht" / "Bei mir klappt der Mai in Schaltjahren vor 1980 nicht" ?

        Lord Helmchen

        1. Hallo,

          In der Tat haben unsere Lordschaft keine Ahnung von myPHPadmin - es wird aber wohl ein Frontend für eine mySQL Datenbank sein? Unsere Lordschaft haben schon genug Datenbanken mit SQL-Konsolen verwaltet.

          dann würde ich nicht mitreden! Vor allem auf diese Art nicht.

          Trotzdem erscheint es grotesk, dass er annimmt, man könne ihm helfen, wenn er sowohl die Struktur seiner Datenbank (Wie hängen die Datensätze voneinander ab? Wie groß ist die Datenbank?) als auch das Statement, das sowohl im Skript als auch in der SQL-Konsole nicht funktionieren soll, nicht nennen will.
          Wenn er so davon überzeugt ist, dass sein SQL-Statement richtig ist, warum fragt er dann? Glaubt er wirklich, dass mySQL einen "Oktober-Bug" haben könnte?
          Unserer Lordschaft deucht, er hält die Forumsteilnehmer weiterhin für Hellseher.
          Was erwartet er denn, was man auf sein Ursprungsposting antworten soll? "Ja" / "Nein" / "Weiss nicht" / "Bei mir klappt der Mai in Schaltjahren vor 1980 nicht" ?

          Nee, Du hast es noch immer nicht verstanden.

          ALLE Monate sind gleich aufgebaut. Es wird ein sehr kompliziertes query abgesetzt, daß eben etwas dauert.
          Der Oktober hat sicher keinen Bug, er hat bei mir nicht mehr Daten, vor allem wäre es der absolute Zufall.

          Es handelt sich um sehr viele Tabellen von verschiedenen Kunden.
          Da die Abfrage IMMER gleich abläuft, erübrigt sich (hatten wir schon) die Frage danach.

          ich frage also immer ab:

          select blablabla from tabelle soundso where date = 'jjjj-mm-tt' and ......

          Alle Monate kommen "schonmal" nicht vor (warum, habe ich gesagt), aber der Monat 10 kommt NIE vor. Da dessen Tabelle normalverteilt nicht wirklich anders aussieht als die anderen, die Abfrage auch nicht anders vonstatten geht, erübrigt sich wohl die Frage nach dem Query und dem Script.

          Meine Frage zielte eher (blauäugig, wie ich merke) darauf ab, ob vielleicht jemand Internes über MySQL weiß, daß bestimmte Abfragen eben anders ablaufen.

          Wenn Du Ahnung von Programmierung hast, weißt Du sicher auch, daß

          a++
          NICHT das Gleiche wie
          a = a + 1
          ist.

          Reiner

          1. es wird doch auf winterzeit umgestellt!!!

            denkt doch mal nach!!!
            oktober um eine stunde länger!!!!!

          2. Hi,

            dann würde ich nicht mitreden! Vor allem auf diese Art nicht.

            Du kannst Dir die Antworten nicht aussuchen. Über den Ton darfst Du gerne denken, was Du willst - das tue ich auch - aber eines anzuzweifeln ist ein Zeichen von mangelndem Überblick: Lord Helmchen hat recht.

            Er könnte Dir sicher helfen, wenn Du ihm das mitteiltest, um was er gebeten (oder gefordert, wie Du willst) hat; denn mehr als die grundlegenden Informationen hat er nicht verlangt.

            Ohne diese kann ich Dir übrigens auch nicht helfen.

            Nee, Du hast es noch immer nicht verstanden.

            Oder Du.

            ALLE Monate sind gleich aufgebaut.

            Natürlich; es handelt sich schließlich (vermutlich) um die gleiche Tabelle. Wie _diese_ aufgebaut ist, und vor allem, wie Du sie abfragst, sind wesentliche Informationen, die Du uns verschweigst.

            Der Oktober hat sicher keinen Bug, er hat bei mir nicht mehr Daten, vor allem wäre es der absolute Zufall.

            Der absolute Zufall ist die Reihenfolge, wie die Daten in der DB stehen. Je nach Aufbau Deines Statements ist das entweder entscheidend, oder komplett irrelevant.

            [...] erübrigt sich wohl die Frage nach dem Query und dem Script.

            Nein.

            Wenn Du Ahnung von Programmierung hast, weißt Du sicher auch, daß
            a++
            NICHT das Gleiche wie
            a = a + 1
            ist.

            Ja. Und genau um ähnliche Informationen anwenden zu können, sind _exakte_ Informationen über DB-Layout und Statement nötig. Andernfalls kann man nur sagen, daß der September der längste Monat des Jahres ist. Kein anderer hat mehr Buchstaben.

            Cheatah

          3. Hi,

            Meine Frage zielte eher (blauäugig, wie ich merke) darauf ab, ob vielleicht jemand Internes über MySQL weiß, daß bestimmte Abfragen eben anders ablaufen.

            Ich denke, es ist immer die selbe Abfrage. Wie soll sie dann "anders ablaufen"?
            Bzw., anders ablaufen als was?

            Ciao, Vedat

          4. a++
            NICHT das Gleiche wie
            a = a + 1
            ist.

            wieso?

            1. a++
              NICHT das Gleiche wie
              a = a + 1
              ist.
              wieso?

              Weil a++ sehr viel schneller abgearbeitet wird!

              1. Hi,

                a++
                NICHT das Gleiche wie
                a = a + 1
                ist.
                wieso?

                Weil a++ sehr viel schneller abgearbeitet wird!

                Ach, und ich dachte Du meinst, weil (bei a = 1) gilt:

                (a++) = 1
                (a = a + 1) = 2

                Gruß,
                Stefan

                1. Hi!

                  Ach, und ich dachte Du meinst, weil (bei a = 1) gilt:

                  (a++) = 1
                  (a = a + 1) = 2

                  Mooooment. Du behauptest also:

                  a=1;
                  a++;
                  print(a); //ergibt 1????

                  und

                  a=1;
                  a=a+1;
                  print(a); //ergibt 2

                  So ungefähr?
                  Hmmmmmm...

                  VG Simon

                  1. Moin!

                    Mooooment. Du behauptest also:

                    a=1;
                    a++;
                    print(a); //ergibt 1????

                    und

                    a=1;
                    a=a+1;
                    print(a); //ergibt 2

                    Nein, tut er nicht. Bitte lies nochmal:

                    (a++) = 1
                    (a = a + 1) = 2

                    Also

                    $a=1;
                    print($a++); // ergibt 1

                    $a=1;
                    print($a = $a+1); // ergibt 2

                    Das Geheimnis liegt im Unterschied zwischen a++ (Postinkrement) und ++a (Preinkrement). Bei ersterem wird der Wert von a zuerst zurückgegeben und a dann um eins erhöht (du siehst also den Wert von a vor der Inkrementierung) und bei letzterem wird a um eins erhöht und dieser neue Wert dann zurückgegeben.

                    --
                    Henryk Plötz
                    Grüße von der Ostsee

                    1. Hi!

                      $a=1;
                      print($a++); // ergibt 1

                      $a=1;
                      print($a = $a+1); // ergibt 2

                      Das Geheimnis liegt im Unterschied zwischen a++ (Postinkrement) und ++a (Preinkrement). Bei ersterem wird der Wert von a zuerst zurückgegeben und a dann um eins erhöht (du siehst also den Wert von a vor der Inkrementierung) und bei letzterem wird a um eins erhöht und dieser neue Wert dann zurückgegeben.

                      Achsoooo, das war gemeint. Jetzt hab ich aber einen Schrecken gekriegt ;-)

                      VG Simon

              2. hi!

                a++
                NICHT das Gleiche wie
                a = a + 1
                ist.
                wieso?
                Weil a++ sehr viel schneller abgearbeitet wird!

                Das glaube ich spontan erstmal nicht... :) Was sollte den Optimierer
                in dem Fall davon abhalten, a=a+1; zu a++; zu optimieren, und dann
                ein INC daraus zu machen?

                bye, Frank!

                1. Hi,

                  Das glaube ich spontan erstmal nicht... :) Was sollte den Optimierer
                  in dem Fall davon abhalten, a=a+1; zu a++; zu optimieren, und dann
                  ein INC daraus zu machen?

                  die Analyse von "'a=a+1' == 'a++'" dauert länger als die von "'a++' == 'a++'". Abgesehen davon wird in allen mir bekannten Systemen bei 'a=a+1' tatsächlich der Wert 'a' mit dem Wert '1' zusammengezählt und anschließend nach 'a' gespeichert, während bei 'a++' der Speicher direkt an der richtigen Stelle modifiziert wird.

                  Selbst 'a+=1' sollte schneller sein als 'a=a+1'. Ist einfach weniger Kopiererei - und semantische "vielleicht könnte man es ja optimieren"-Vergleiche beschleunigen zwar vielleicht die eine Zuweisung, verlangsamen dafür aber den Rest des Programms.

                  Cheatah

                  1. Hallo Cheatah,

                    weniger Kopiererei - und semantische "vielleicht könnte man es ja >> optimieren"-Vergleiche beschleunigen zwar vielleicht die eine >> Zuweisung, verlangsamen dafür aber den Rest des Programms.

                    äh kapier ich nicht, wenn der Compiler das optimiert braucht er länger zum compilieren O.K. aber das Programm selbst ist optimiert dann auf jeden Fall schneller, falls der Compiler nicht Schrott ist. Und ich denke es gibt sicher Compiler die so optmieren.
                    Gilt natürlich nicht für Interpretersprachen.

                    Gruss

                    Marko

                    1. Hi!

                      weniger Kopiererei - und semantische "vielleicht könnte man es ja >> optimieren"-Vergleiche beschleunigen zwar vielleicht die eine >> Zuweisung, verlangsamen dafür aber den Rest des Programms.

                      äh kapier ich nicht, wenn der Compiler das optimiert braucht er länger zum compilieren O.K. aber das Programm selbst ist optimiert dann auf jeden Fall schneller, falls der Compiler nicht Schrott ist. Und ich denke es gibt sicher Compiler die so optmieren.
                      Gilt natürlich nicht für Interpretersprachen.

                      Gut, a=a+1 ließe sich ja noch beim Kompilieren erkennen und optimieren. Aber normalerweise hast Du ja sowas wie a=a+x und das lässt sich natürlich nicht auflösen.
                      Außerdem wird sich der Compiler nicht die Mühe machen, die unendlich vielen Möglichkeiten für solche Anweisungen zu entdecken und aufzulösen.

                      VG Simon

                  2. hi!

                    Das glaube ich spontan erstmal nicht... :) Was sollte den
                    Optimierer in dem Fall davon abhalten, a=a+1; zu a++; zu
                    optimieren, und dann ein INC daraus zu machen?
                    die Analyse von "'a=a+1' == 'a++'" dauert länger als die von
                    "'a++' == 'a++'". Abgesehen davon wird in allen mir bekannten
                    Systemen bei 'a=a+1' tatsächlich der Wert 'a' mit dem Wert '1'
                    zusammengezählt und anschließend nach 'a' gespeichert, während bei
                    'a++' der Speicher direkt an der richtigen Stelle modifiziert
                    wird.

                    Dann mach ich mal eben einen Test mit dem Intel-Compiler. Folgendes
                    Programm:

                    === cut ===
                    void main() {
                      int a = 0;

                    a++;
                      a+=1;
                      a=a+1;

                    a+=2;
                      a=a+2;
                    }
                    === cut ===

                    (Angeblich komplett) ohne irgendwelche Optimierungen kommt dabei das
                    hier heraus (zum Nachvollziehen: die Parameter waren /S /GX- /GR-
                    /FAcs /Od):

                    === cut ===
                    ;;; void main() {

                    push      ebp                             ;test.c:1.13
                            mov       ebp, esp                        ;test.c:1.13
                            sub       esp, 3                          ;test.c:1.13
                            and       esp, -8                         ;test.c:1.13
                            add       esp, 4                          ;test.c:1.13
                            sub       esp, 4                          ;test.c:1.13

                    ;;;   int a = 0;

                    mov       DWORD PTR [ebp-4], 0            ;test.c:2.7

                    ;;;   a++;

                    inc       DWORD PTR [ebp-4]               ;test.c:4.3

                    ;;;   a+=1;

                    inc       DWORD PTR [ebp-4]               ;test.c:5.3

                    ;;;   a=a+1;

                    inc       DWORD PTR [ebp-4]               ;test.c:6.5

                    ;;;   a+=2;

                    add       DWORD PTR [ebp-4], 2            ;test.c:8.3

                    ;;;   a=a+2;

                    add       DWORD PTR [ebp-4], 2            ;test.c:9.5

                    ;;; }

                    xor       eax, eax                        ;test.c:10.1
                            leave                                     ;test.c:10.1
                            ret                                       ;test.c:10.1
                    === cut ===

                    Der GNU-Compiler macht daraus (nur mit der Option -S) folgenden Code:

                    === cut ===
                    _main:
                     pushl %ebp
                     movl %esp,%ebp
                     subl $24,%esp
                     call ___main
                     movl $0,-4(%ebp)
                     incl -4(%ebp)
                     incl -4(%ebp)
                     incl -4(%ebp)
                     addl $2,-4(%ebp)
                     addl $2,-4(%ebp)
                    L2:
                     movl %ebp,%esp
                     popl %ebp
                     ret
                    === cut ===

                    Und jetzt erzähl mir nochmal, bei diesen Anweisungen würden jeweils
                    unterschiedliche Instruktionen herauskommen. Der Intel-Compiler war
                    übrigens v5.0, der GNU-Compiler v2.95.3-5, beide unter Win2000.

                    bye, Frank!

                  3. Hi,

                    Abgesehen davon wird in allen mir bekannten Systemen bei 'a=a+1' tatsächlich der Wert 'a' mit dem Wert '1' zusammengezählt und anschließend nach 'a' gespeichert, während bei 'a++' der Speicher direkt an der richtigen Stelle modifiziert wird.

                    Darueber solltest Du nochmal nachdenken. In welcher Weise wird denn bei 'a++' der Speicher modifiziert? Der neue Wert wird also reingeschrieben. Ok, und wo kommt der her? Der Speicher selbst kann nicht addieren, das macht immer noch der Prozessor. Also der Prozessor hat das neue a berechnet. Aber was wurde als Ursprungswert fuer a genommen? Woher sollte den der Prozessor wissen? Er musste ihn natuerlich auch erst aus dem Speicher holen. In jedem Falle muss also a in ein Prozessorregister gelesen, dort 1 addiert und schliesslich der neue Wert wieder zurueckgeschrieben werden.

                    Jedoch kann man sich (als Compiler) tatsaechlich voellig bescheuert anstellen und auf einer Intel-Architektur folgendes 1:1 uebersetzen:

                    ; a = a + 1
                    mov eax, [a]
                    inc eax
                    mov [a], eax

                    ; a += 1
                    add dword ptr [a], 1

                    ; a++
                    inc dword ptr [a]

                    Hier ergibt sich in erster Linie ein Unterschied in der Code-Groesse (im ersten Beispiel gleich zweimal Adressierung von a (jedesmal +4 Bytes bei 32-Bit-Umgebung)). Die Ausfuehrungsgeschwindigkeit sollte bei modernen Prozessorarchitekturen weniger differieren, wenn alle Befehlsbytes schoen im Cache sind (denke ich mir so).

                    Alles in allem ist es also nicht dasselbe, wenn man einen desastroes dummen Compiler voraussetzt. Nur: welchen in den letzten 20 Jahren produzierte Compiler koennte man so einstufen? Letztlich ist es also doch dasselbe.

                    Selbst 'a+=1' sollte schneller sein als 'a=a+1'. Ist einfach weniger Kopiererei - und semantische "vielleicht könnte man es ja optimieren"-Vergleiche beschleunigen zwar vielleicht die eine Zuweisung, verlangsamen dafür aber den Rest des Programms.

                    Was meinst Du damit?

                    So long

            2. Hi!

              a++
              NICHT das Gleiche wie
              a = a + 1
              ist.
              wieso?

              weil es einfach ein anderer Ausdruck ist. Und je nach Sprache und Definition von a und + kann was unterschiedliches rauskommen.

              kurzes Javascriptbeispiel:

              <script>
              a="2 oder ";

              //a++; // 1. Versuch (gibt: NaN, IMHO wäre aber auch 3 ok, je nach Implementation)
              a=a+1; // 2.Versuch gibt '2 oder 1'

              alert (a);
              </script>

              Es gibt zwei Unterschiede:
              a wird zweimal ausgewertet. Das gibt unterschiedliche Resulte wenn a nicht seiteneffektfrei ist. (in C z.b.: #define a (*b++) )
              Der + Operator mit dem rechten Argument 1 muss nicht das gleiche machen wie der increment Operator (s.o.). (Also wenn + in einer Sprache nicht nur für Addition verwendet wird.)

              Ausserdem ist natürlich "a=a+1" != "a++" um dem Bauernfängerncharacter der Aussage gerecht zu werden.

              Gruss,
               Carsten

          5. Seid gegruesst!

            dann würde ich nicht mitreden! Vor allem auf diese Art nicht.

            Unserer Lordschaft Ton ist doch ausgesprochen höflich? Im übrigen reden unsere Lordschaft überall, wo es ihr beliebt. Gerade hier im Forum bieten unsere Lordschaft gern ihre Hilfe an; Adel verpflichtet.

            Ob a = a + 1 das gleiche ist wie a++ ist sicher eine Frage des Interpreters / Compilers. Wahrscheinlich hebt er darauf ab, dass a++ "atomar" implementiert sein könnte, was allerdings auch von der Hardwareplattform abhängig wäre, was unsere Lordschaft zu bedenken geben wollen.

            Da er das Statement nicht nennen will können unsere Lordschaft auch keine Vorschläge zur Optimierung desselben unterbreiten. Unsere Lordschaf empfehlen also die Lektüre einige Handbücher über Datenbanken, was ihn eventuell in die Lage versetzen könnte, sein Statement von Hand zu optimieren, da der Optimierungsmechanismus von mySQL möglicherweise noch nicht besonders gewitzt vorgeht (aber sicher kennt er alle Methoden aller drei Phasen der Anfrageoptimierung auswendig, die professionelle Datenbanken durchführen, darum benutzt er die Profidatenbank mySQL).
            Sollte die Laufzeitoptimierung der Anfrage auf diese Art und Weise nicht von Erfolg gekrönt sein, dann könnte er versuchen, die Operation aufzuspalten und Zwischenergebnisse in temporären Tabellen abzulegen. Das Transaktionsmanagement müsste er dann allerdings selbst in die Hand nehmen - angesichts der Tatsache, dass mySQL unserer Lordschaft Meinung nach gar kein Transaktionsmanagement hat, sicher keine schwere Aufgabe für ihn.

            Lord Helmchen

            1. Hallo Lord,

              dann würde ich nicht mitreden! Vor allem auf diese Art nicht.

              Unserer Lordschaft Ton ist doch ausgesprochen höflich? Im übrigen reden unsere Lordschaft überall, wo es ihr beliebt. Gerade hier im Forum bieten unsere Lordschaft gern ihre Hilfe an; Adel verpflichtet.

              "Unhöflich" fand ich Dich nicht.
              Auch verstehe ich viel Spaß! :-)
              Ich hatte nur den Eindruck, Du verstehst mich nich, willst mich nur etwas foppen...

              Ob a = a + 1 das gleiche ist wie a++ ist sicher eine Frage des Interpreters / Compilers. Wahrscheinlich hebt er darauf ab, dass a++ "atomar" implementiert sein könnte, was allerdings auch von der Hardwareplattform abhängig wäre, was unsere Lordschaft zu bedenken geben wollen.

              Ja, genau. Meine Frage zielte -wie gesagt- darauf ab, daß u.U. bestimmte Dinge sich bei bestimmten Werten anders verhalten, so wie dieses Beispiel mit a++.

              Da er das Statement nicht nennen will können unsere Lordschaft auch keine Vorschläge zur Optimierung desselben unterbreiten. Unsere Lordschaf empfehlen also die Lektüre einige Handbücher über Datenbanken, was ihn eventuell in die Lage versetzen könnte, sein Statement von Hand zu optimieren, da der Optimierungsmechanismus von mySQL möglicherweise noch nicht besonders gewitzt vorgeht (aber sicher kennt er alle Methoden aller drei Phasen der Anfrageoptimierung auswendig, die professionelle Datenbanken durchführen, darum benutzt er die Profidatenbank mySQL).
              Sollte die Laufzeitoptimierung der Anfrage auf diese Art und Weise nicht von Erfolg gekrönt sein, dann könnte er versuchen, die Operation aufzuspalten und Zwischenergebnisse in temporären Tabellen abzulegen. Das Transaktionsmanagement müsste er dann allerdings selbst in die Hand nehmen - angesichts der Tatsache, dass mySQL unserer Lordschaft Meinung nach gar kein Transaktionsmanagement hat, sicher keine schwere Aufgabe für ihn.

              Ok, das beweist schon, daß Du doch was Ahnung hast, nicht nur rumschwätzt, was man bei manchen Leuten hier oft nicht so recht erkennen kann.

              Es handelt sich um eine Tabelle!
              Dort werden Daten geloggt:

              ID|Datum|Zeit|Kunde|Mitteilung

              Ich möchte nun gerne wissen, wieviele Mitteilungen der Kunden 1000 im März gemacht hat:

              select from tabelle where date >= '2001-03-01' and date <= '2001-03-31' and kunde = '1000'

              Mehr ist es einfach nicht, was soll ich sonst noch schreiben....

              Da das in Schleifen jeweils für jeden Kunden und jeden Monat erneut angestoßen wird, ergibt sich auch, daß die Voraussetzungen für jede Aktion eigentlich die Gleichen sein müßten, oder?

              Deswegen ist es sehr verwunderlich, daß gerade der Oktober so sehr auffällt.

              Reiner

              1. Hallo,

                Es handelt sich um eine Tabelle!
                Dort werden Daten geloggt:
                ID|Datum|Zeit|Kunde|Mitteilung
                Ich möchte nun gerne wissen, wieviele Mitteilungen der Kunden 1000 im März gemacht hat:
                select from tabelle where date >= '2001-03-01' and date <= '2001-03-31' and kunde = '1000'

                Vielleicht sehe ich das ein bißchen blauäugig, aber warum fragst Du alle Daten ab, wenn Du nur wissen willst, wie viele es sind?

                select Kunde, YEAR(Datum), MONTH(Datum), count(*) Anzahl from tabelle group by Kunde, YEAR(Datum), MONTH(Datum)

                oder, wenn Du wirklich alle Daten eines Monats haben willst, modifizere Deine Abfrage so

                select from tabelle where kunde = '1000' and YEAR(Datum)=2001 and  MONTH(Datum)=3

                dann sind Dir wenigsten die Tage im Monat wurscht.

                Grüße
                  Klaus

              2. Hi,

                Subject: endlich

                endlich was?

                select from tabelle where date >= '2001-03-01' and date <= '2001-03-31' and kunde = '1000'

                Mehr ist es einfach nicht, was soll ich sonst noch schreiben....

                Z.B., ob Du das Statement aus irgendwelchen Variablen und Berechnungen generierst. Falls dem so ist, laß Dir doch mal das Statement auf den Bildschirm ausgeben.

                Da das in Schleifen jeweils für jeden Kunden und jeden Monat erneut angestoßen wird, ergibt sich auch, daß die Voraussetzungen für jede Aktion eigentlich die Gleichen sein müßten, oder?

                Kommt auf die Schleife an.

                Cheatah

  2. Hallo Reiner,

    bei Schlund gibt es einen DB-Timeout von 120 Sek.
    Ich habe mein Script darauf angepaßt und breche es nach 110 Sek. ab.
    Nun stelle ich fest, daß manche Monate fehlen (wegen dem TimeOut), aber der Oktober ist NIE vorhanden. Und das gilt generell für nur für diesen Monat.

    Mal ein paar allgemeine Fragen (ohne Berücksichtigung von MySQL):

    Sind auf den/der angesprochenen Tabelle(n) Indizes?
    Fragst Du anhand der Indizes Deine Informationen ab?

    Beispieltabelle [Altersangaben]:
    _Index1_  _Index2_
    Vorname   Nachname   Alter
    Hugo      Meyer      12
    Emil      Mueller    13
    Oskar     Meyer      36
    Guido     Mueller    48
    [...]

    Hier gibt es unter Umständen (Datenvolumen) einen gewaltigen Performance-Unterschied zwischen
    [SQL1]
    SELECT Vorname, Nachname, Alter
      FROM Altersangaben
     WHERE Nachname = "Meyer"
       AND Vorname  = "Guido"

    [SQL2]
    SELECT Vorname, Nachname, Alter
      FROM Altersangaben
     WHERE Vorname  = "Guido"
       AND Nachname = "Meyer"

    SQL1 arbeitet nicht anhand des Index (falls kein Optimizer zuschlägt), SQL2 folgt brav dem Index, was natürlich performanter ist.

    Falls Du auf Deinen Tabellen gar keine Indizes hast, versuchs mal mit Indizes und selektiere anhand dieser, den Rechner (und Dich auch) wirds freuen. Ansonsten macht jede Datenbank auch gnadenlos einen Full-Table-Scan und das kostet Zeit.

    Oder könnte das einen Grund haben?

    Vielleicht ist das der Grund.

    Bis denndann
    Michael N.

    1. Falls Du auf Deinen Tabellen gar keine Indizes hast, versuchs mal mit Indizes und selektiere anhand dieser, den Rechner (und Dich auch) wirds freuen. Ansonsten macht jede Datenbank auch gnadenlos einen Full-Table-Scan und das kostet Zeit.

      Oder könnte das einen Grund haben?
      Vielleicht ist das der Grund.

      Danke, das werde ich mal prüfen!!!
      Super!

      Reiner