fehlerhaftes Update

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

  • fehlerhaftes Update

    Hallo,

    zur Zeit arbeite ich an einem Projekt, welches es erfordert eine große Menge Daten in die Datenbank zu schreiben.
    Dies ging problemlos, nun musste ich einige dieser Datensätze aktualisieren, bzw deren Eigenschaften ergänzen.
    Es geht hierbei um ca. 16.000 Datensätze, pro Datensatz mehrere Spalten mit verschiedenen Einträgen.
    Nun sollte eigt jede Spalte und jede Zeile gefüllt sein, aber es gibt in unregelmäßigen Abständen immerwieder mal einen Datensatz, der keine neuen Eigenschaften hat. woran kann das liegen?
    Das ganze wurde über eine while Schleife realisiert, sprich es gab 16.000 Querys.
    Könnte es sich um eine Überlastung handeln?


    regards
    Zine

  • #2
    Ich behaupte einfach mal, es lag eher am Code als an Überlastung. Zeigst du ihn uns?

    Kommentar


    • #3
      Gern...

      Das Script soll nur den unbewohnbaren Planeten Eigenschaften hinzufügen, da es schon bewohnbare gibt, muss ich diese natürlich abziehen.
      In dem Array id_array sind sämtliche ID's der bewohnbaren Planeten.


      PHP-Code:
      $sql="SELECT id FROM koords_planet"
      $resultmysql_query($sql) or die(mysql_error()); 
      $num_rows mysql_num_rows($result);
          
      $unbewohnbar $num_rows $bewohnbare_planeten;
      $count 1;
      while(
      $count $unbewohnbar)
          {

       if(
      in_array($count,$id_array)) {$count++;} else
          {
          
      $temp_min rand(-300,399);
          
      $temp_max rand($temp_min,400);
          
      $atmo rand(3,6);
          
      $sql ="UPDATE koords_planet SET temp_min = $temp_min, temp_max = $temp_max, atmo = $atmo, bewohnbar = '0' WHERE id = '$count'";
          
      mysql_query($sql) or die(mysql_error());
          
      $count++;
          }
         } 

      Kommentar


      • #4
        Ich behaupte ferner, dass sich das mit einer einzigen Query lösen läßt.

        'UPDATE koords_planet SET temp_min = FLOOR(-300 + RAND() * (399 + 300), temp_max = FLOOR(-300 + RAND() * (400 + 300), atmo = FLOOR(3 + RAND() * (6 - 3), bewohnbar = 0 WHERE id NOT IN ('.implode(',', $id_array).')'

        Das entspricht nicht ganz deinem Code was die Min/Max-Temperaturen angeht. Aber ich sehe auch wenig Sinn in deinem Ansatz und wenn du ihn dennoch exakt wie geplant umsetzen mußt, setzt du alle temp_max eben mit einer zweiten Query.

        Kommentar


        • #5
          Hm, wo siehst du wenig Sinn in meinem Ansatz?
          Ich versteh den Query nicht so ganz, denn schliesslich könnte so bei temp_min ja utopische Zahlen rauskommen.

          FLOOR(-300 + RAND() * (399 + 300)

          -300+Zufallszahl bis 32767 * (399+300)
          -300+(zb)10000*699
          -300+6990000

          Ergebnis: 6989700

          Ziel sollte es ja eigt sein, Temperaturen von -300 bis max +400 zu ermitteln.

          Kommentar


          • #6
            Original geschrieben auf http://dev.mysql.com/doc/refman/5.0/...functions.html
            Returns a random floating-point value v between 0 and 1 inclusive (that is, in the range 0 <= v <= 1.0)
            FLOOR(-300 + RAND() * (399 + 300)) ist also z.B.
            FLOOR(-300 + 0.5 * (399 + 300)) = FLOOR(49,5) = 49

            In der Query habe ich übrigens einige Klammern vergessen, ist mir grad aufgefallen. Aber dein Ansatz ist richtig - sorry, war spät gestern - und du brauchst eine 2. Query. Die erste läßt du nur die temp_min setzen und mit der zweiten dann temp_max in Abhängigkeit von temp_min.

            Damit sollte sich dein ursprüngliches Problem erledigt haben oder zumindest einfacher tracken lassen, denn es findet alles in MySQL statt.

            Kommentar


            • #7
              Achja.. mal wieder PHP/MYsql verwechselt.. sorry.
              Mit den Klammern war mir auch schon aufgefallen, aber ich wollte nicht so altklug wirken.
              Erstmal vielen Dank, hilft mir sicherlich weiter.

              Kommentar

              Lädt...
              X