Script braucht 515 Sekunden :(

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

  • #61
    Also wenn ich das richtig verstehe, zeichnest Du den Graphen (also den Kursverlauf) einer Aktie über die 200 Tage und möchstest für das Intervall dieser 200 Tage den absoluten Höchstwert extra markieren (z.B. mit einem roten Punkt o.ä.).

    Diese rozedur da oben führst Du für jede in Deiner DB enthaltene Aktie durch.

    Hab ich das soweit richtig gerafft?

    Außerdem nehme ich an, daß Du die Anfrage 1500 mal durchführst, damit immer gleich beim Zeichnen der absolute Höchstwert markiert wird, bzw. wenn danach dann ein höherer Wert kommt "verschiebt" sich die Markierung auf den neuen, höheren Wert.

    Da könnte man doch auch mit dem SELECT MAX(CLOSE) Statement den Eintrag mit dem Höchstwert suchen. Der hat ja eine ID. Dann zeichnest Du ganz einfach den Grafen auf, und wenn der Eintrag mit dem Höchstwert dran ist (mit obigem SELECT ermittelt), markierst Du ihn einfach. Also zeichnest Du erst von ID=0 bis ID=Datensatz mit Max-Wert -1, dann kommt der markierte, und dann von ID=Datensatz mit dem Max-Wert+1 bis zum Ende.

    Kommentar


    • #62
      Mein Skript macht bestimmt nicht das, was sich jetzt herausgestellt hat was es tun sollte/könnte.

      Kommentar


      • #63
        Hmm, obwohl es vielleicht wohl geht...

        Jetzt geht wieder was mit Beispielen. Brauche irgendwie den Bezug zur Realität um richtig denken zu können. Das ist jetzt nicht direkt auf deine Sache bezogen, sondern muss angepasst werden.)

        wenn ich jetzt am 1.1. wert 150 Ocken hab. dann speicher ich den mit datum in ein array. Zähler => Wert. Diese Array hat 200 Felder. In der Schleife lässt du nen Zähler mitlaufen Und speicherst jedes mal den Wert mit Zähler darein.

        Dann kommt ne Prüfung (if neuer wert größer als einer der alten) und entweder wird der markiert, oder auch nicht. und dann wird der ins array gesetzt (ersetzt ein anderes entsprechend des Zählers.)

        Kommentar


        • #64
          "Wenn heute der Kurswert ..." (siehe Zeichnung)

          Das heute ist nicht gleichzusetzen mit dem aktuellsten Datensatz, oder?

          Kommentar


          • #65
            Wer weiß, vielleicht doch?
            PHP-Code:
            $wkn "14708938"// nur ein Beispiel
            $DaysRetour 200;

            // Ermittle den Maximalen Schlußkurs im gegebenen Zeitraum
            $query "SELECT MAX(Close) as MAXI FROM us_dax_frankfurt
                         WHERE WKN = '
            $wkn' AND
                         DATE BETWEEN DATE_SUB(now(), INTERVAL 
            $DaysRetour DAY) AND DATE_SUB(now(), INTERVAL 1 DAY) ";

            $result mysql_query($query
               or print 
            "&gt;&gt;&gt; MySQL-Error: ".mysql_errno()." -&gt; ".mysql_error()."<br>\n";; 

            while(
            $row == mysql_fetch_array($result)){ 
               
            $maxCloseInRange $row[MAXI]; 


            // Ermittle den heutigen momentanen Schlußkurs
            $query "SELECT Name, Close FROM us_dax_frankfurt WHERE WKN = '$wkn' AND Date = now()";
            $result mysql_query($query)
               or print 
            "&gt;&gt;&gt; MySQL-Error: ".mysql_errno()." -&gt; ".mysql_error()."<br>\n";; 

            while(
            $row == mysql_fetch_array($result)){ 
               
            $CloseOfToday $row[Close];
               
            $MyTarget     $row[Close]; 
            }

            If (
            $CloseOfToday $maxCloseInRange) {
               print 
            "Pfoahh Höchster Wert seit $DaysRetour Tagen: $CloseOfToday<br>\n";
            }
            // was Du jetzt mit den Daten machst, bleibt Dir überlassen
            Print "MyTarget:$MyTarget maxCloseInRange:$maxCloseInRange CloseOfToday:$CloseOfToday <br>\n";
            ?> 

            Kommentar


            • #66
              @ Tobiaz,

              genau das Heute entspricht nur der aktuellen Position von $i( Das ist von der for-Schleife aus der ersten DB Abfrage -> Sortiere eine bestimmte Aktie nach Datum) , aber im Grunde stelle ich mir halt vor, dass dieser Wert dem Heute entspricht. Denn das Script soll ja so tun, als ob es von den zukünftigen Werten nichts weiss.

              Grüße
              cu LaHood

              Kommentar


              • #67
                @Lahood: Okay, aber es ist ja ein unterschied, ob es nur ein Heute gibt, oder ob es so gesehen mehrere gibt.

                Sieh dir mal die Lösungen an.

                Kommentar


                • #68
                  ok also nochmal ne Grafik die animiert ist *gg*

                  Ist allerdings 80kB gross

                  Grüße
                  cu LaHood
                  Angehängte Dateien

                  Kommentar


                  • #69
                    genau TobiaZ,

                    das ist ja auch de Grund warum ich da 1500 Abfragen hatte, weil jedes dieser Abfragen quasi ein Heute sein sollte.


                    Grüße
                    cu LaHood

                    Kommentar


                    • #70
                      @ Opa,

                      jep ich bekomme mit einer einzigen Abfrage alle Werte. Nur wie kann ich dann mit diesen Werten jeweils den Maxwert der letzten 200 Tage ermitteln?
                      Ich bräuchte dann eine Funktion die mir den aktuellen Wert

                      $ergebnis[$heute]['Close'];

                      mit demMaxwert im Zeitraum

                      $ergebnis[($heute-200)['Close'];

                      vergleicht. Nur wie stelle ich das an?
                      Wie wäre es mit

                      PHP-Code:
                      function heuteGroesser($heute$zuletzt) { 

                      if (
                      $heute == $zuletzt) {
                         return 
                      TRUE;
                      } else {
                         return 
                      FALSE;

                      Die Funktion liefert True false heute der Höchstwert der letzten 200 Tage überschritten wurde und sonst false...

                      @ Ultra

                      genau der Chart wird durch PHP erstellt.
                      Das würde ja bedeuten, dass du doch alle Werte aus der DB brauchst. Also würde ich über ... die Daten auslesen.
                      PHP-Code:
                      $query "SELECT * FROM us_dax_frankfurt";
                      $result mysql_query($query
                         or print 
                      "&gt;&gt;&gt; MySQL-Error: ".mysql_errno()." -&gt; ".mysql_error()."<br>\n"

                      while(
                      $row == mysql_fetch_array($result)){ 
                         
                      $row; <-- hier erhäst du zyklisch alle Werte des Arrays 

                      Nun hast du in $row alle Daten und kannst daruas sowohl den Chart zeichnen als auch das Maximum ermitteln.
                      Zuletzt geändert von Op@ U.; 08.01.2003, 14:39.

                      Kommentar


                      • #71
                        @P2oldi

                        Also wenn ich das richtig verstehe, zeichnest Du den Graphen (also den Kursverlauf) einer Aktie über die 200 Tage und möchstest für das Intervall dieser 200 Tage den absoluten Höchstwert extra markieren (z.B. mit einem roten Punkt o.ä.).
                        Ich zeichne als erstes den historischen Aktienchart mit zur Zeit Daten bis Ende 1995 (also mehr als 200 Tage )

                        Diese rozedur da oben führst Du für jede in Deiner DB enthaltene Aktie durch.

                        Hab ich das soweit richtig gerafft?
                        Das ist das Ziel, aber zur Zeit geht es erstmal um eine einzelne Aktie.

                        Außerdem nehme ich an, daß Du die Anfrage 1500 mal durchführst, damit immer gleich beim Zeichnen der absolute Höchstwert markiert wird, bzw. wenn danach dann ein höherer Wert kommt "verschiebt" sich die Markierung auf den neuen, höheren Wert.
                        Nein, Step 1 ist -> zeichne mir den AKtienchart komplett vom ersten Datum bis zum letzen Datum.

                        Bedingung 1
                        Ich möchte nicht einfach den normalen Höchstwert markieren, sondern nur dann den Höchstwert markieren, wenn in den letzten 200 Tagen ab diesem Höchstwert kein anderer Höchstwert existiert.

                        Step 2:
                        Markiere mir nur die Punkte bei denen Bedingung 1 zutrifft.



                        Grüße
                        cu LaHood

                        Kommentar


                        • #72
                          @Hand,

                          ich habe dein Script mal eingebaut in meins, bekomme aber keinen Wert bei:

                          $maxCloseInRange = $row[MAXI];

                          PHP-Code:
                          $DaysRetour 200;

                          // Ermittle den Maximalen Schlußkurs im gegebenen Zeitraum
                          $query "SELECT MAX(Close) as MAXI FROM us_dax_frankfurt
                                       WHERE Name = '
                          $aktie' AND
                                       DATE BETWEEN DATE_SUB(now(), INTERVAL 
                          $DaysRetour DAY) AND DATE_SUB(now(), INTERVAL 1 DAY) ";

                          $result4 mysql_query($query
                             or print 
                          "&gt;&gt;&gt; MySQL-Error: ".mysql_errno()." -&gt; ".mysql_error()."<br>\n";; 

                          while(
                          $row == mysql_fetch_array($result4)){ 
                             
                          $maxCloseInRange $row[MAXI]; 

                          Hast du ne Idee woran das liegen könnte?

                          Grüße
                          cu LaHood

                          Kommentar


                          • #73
                            Das funzt nur, wenn das Datenfeld Date vom Feldtyp "date" oder "datetime" ist. In diesem Fall wird das Datum im Format "JJJJ-MM-TT" in der Datenbank gespeichert. Die Anweisung
                            NOW()
                            produziert nichts anderes als die aktuelle Tageszeit,
                            date_sub(now(),interval 200 day)
                            das Datum vor 200 Tagen,
                            date_sub(now(),interval 1 day)
                            das gestrige Datum

                            Code:
                            mysql> select now();
                            +---------------------+
                            | now()               |
                            +---------------------+
                            | 2003-01-08 18:41:48 |
                            +---------------------+
                            1 row in set (0.02 sec)
                            
                            mysql> select date_sub(now(),interval 200 day);
                            +----------------------------------+
                            | date_sub(now(),interval 200 day) |
                            +----------------------------------+
                            | 2002-06-22 18:42:38              |
                            +----------------------------------+
                            1 row in set (0.00 sec)
                            
                            mysql> select date_sub(now(),interval 1 day);
                            +--------------------------------+
                            | date_sub(now(),interval 1 day) |
                            +--------------------------------+
                            | 2003-01-07 18:42:53            |
                            +--------------------------------+
                            1 row in set (0.00 sec)


                            Felddefinitionen der Tabelle kannst Du mit diesem Skript auswerten

                            PHP-Code:
                            <?php
                            // Connect
                            $db    "test";             // Datenbankname
                            $table "us_dax_frankfurt"// Tabellenname 

                            mysql_select_db("test");
                            $query "describe $table";
                            $result mysql_query($query)
                               or print 
                            "&gt;&gt;&gt; MySQL-Error: ".mysql_errno()." -&gt; ".mysql_error()."<br>\n";

                            print 
                            "<table border=1><tr><th colspan=6>$query</th></tr>";
                            echo 
                            "<tr>
                                  <th>Field</th>
                                  <th>Type</th>
                                  <th>Null</th>
                                  <th>Key</th>
                                  <th>Default</th>
                                  <th>Extra</th>                  
                                  </tr>"
                            ;
                                  
                            while(
                            $row mysql_fetch_array($result)){
                               echo 
                            "<tr>
                                     <td>
                            $row[0]&nbsp;</td>
                                     <td>
                            $row[1]&nbsp;</td>
                                     <td>
                            $row[2]&nbsp;</td>
                                     <td>
                            $row[3]&nbsp;</td>
                                     <td>
                            $row[4]&nbsp;</td>
                                     <td>
                            $row[5]&nbsp;</td>                  
                                     </tr>"
                            ;
                            }

                            print 
                            "</table>";
                            ?>
                            Also schauen wir mal. Post mal das Ergebnis des Skripts.

                            Kommentar


                            • #74
                              grad ist mir noch was eingefallen. vielelich ist es schon gepostet worden vielleicht auch nicht.
                              GROUP könnte deine lösung sein, denke ich ...

                              PHP-Code:
                              $query "SELECT ´Date´,MAX(Close) as MAXI FROM us_dax_frankfurt
                                        WHERE Name = '
                              $aktie' AND ´Date´ BETWEEN 'startdatum' AND 'endedatum' 
                                        GROUP BY ´Date´"

                              müsste dann so für ein aktie aussehen (demodaten)

                              Code:
                              .
                              .
                              .
                              2001-10-03 | 10.5
                              2001-10-04 | 11.5
                              2001-10-05 | 45.0
                              .
                              .
                              .
                              dein feld 'date' muss natürlich auch vom typ DATE sein.

                              wenn es vom typ DATETIME ist, müsste das so aussehen.

                              PHP-Code:
                              $query "SELECT DATE_FORMAT(´Date´,"%Y-%m-%d") Datum,MAX(Close) as MAXI FROM us_dax_frankfurt
                                        WHERE Name = '
                              $aktie' AND ´Date´ BETWEEN 'startdatum' AND 'endedatum' 
                                        GROUP BY Datum"

                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar


                              • #75
                                @Hand,

                                das Datefield ist von Typ date. Wie es aussieht habe ich es nun hinbekommen, allerdings noch mit einer Laufzeit von 175 Sekunden.

                                Zumindestens zeigt er mir die Maxwerte nun grafisch an.


                                Grüße
                                cu LaHood

                                Kommentar

                                Lädt...
                                X