Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Insert nur bei Änderung der Daten

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Insert nur bei Änderung der Daten

    Hallo
    Ich hoffe das mir jemand bei meinem Problem helfen kann.
    Ich schreibe hiermit alle paar Minuten Logdatein in eine MySQL Datenbank.
    $con = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd);
    if (!$con) {
    die('Verbindung nicht möglich : ' . mysql_error());
    }

    $db_selected = mysql_select_db($mysqldb, $con);
    if (!$db_selected) {
    die ('Kann db nicht benutzen : ' . mysql_error());
    }

    $sql1 = "INSERT INTO {$table1} (id, {$fields}) VALUES ('',{$sqldata})";
    mysql_query($sql1);

    $table1 ist der Tabelname
    $fields Array mit 20 Strings
    $sqldata Array mit 20 Daten ( z.B. '10 AB FF e1 12 00 a9 67')

    Die Datenbank ergänzt die Daten noch einen aktuellen Timestamp und eine fortlaufende ID Nummer automatisch.
    So komme ich insgesamt auf 22 Felder welche ich fülle.

    Die Datenbank läuft aber sehr schnell voll, da fast im Minutentakt die Daten dort abgelegt werden. Dieses ist wichtig um die Änderungen mit zu bekommen. Es gibt aber Zeiten, wo sich über Stunden nichts ändert, also habe ich mal eben über 60 doppelte Einträge.

    Ich möchte, bevor ich die Werte in die Datenbank schreibe, erst einmal prüfen ob diese schon vorhanden . Sind die Werte identisch so verwerfe ich den Eintrag und prüfe eine Minute später das selbe noch einmal, solange bis eine Änderung eingetreten ist. Diese schreibe ich dann in die Datenbank.
    Doch wie fange ich das am besten an.
    Marc

  • #2
    Ich möchte, bevor ich die Werte in die Datenbank schreibe, erst einmal prüfen ob diese schon vorhanden . Sind die Werte identisch so verwerfe ich den Eintrag und prüfe eine Minute später das selbe noch einmal, solange bis eine Änderung eingetreten ist. Diese schreibe ich dann in die Datenbank.
    Doch wie fange ich das am besten an.
    So wie du es geschrieben hast :P.

    Zuerst auslesen, dann entscheiden - verwerfen oder einfügen.

    Wo liegt das Problem?

    Wenn du weisst, wie man Daten einfügt, solltest du ja auch wissen, wie man Daten ausliest, nicht?

    Nach dem auslesen fragst du einfach mit einer FOR-Klause ab, ob sich der Wert geändert hat...

    Beispiel:
    PHP-Code:
    <?php

    // neue Daten in einen array speichern
    $var1 "bla";
    $var2 "blabla";
    $aendern 0;
    $data = array($var1$var2)

    // auslesen der Daten aus der DB --> $result = mysql_fetch_array(mysql_query($sql)) ist deine Ausgabe

    // vergleich mit den neuen Daten x ist die anzahl an Variablen bzw. Felder die du überprüfen willst/musst.

    for($i=0$i<$i++)
    {
        if(
    $data[$i] != $result[$i])
        {
            
    $aendern += 1;
            
    $new[$result[$i]] = $data[$i]; 
        }
    }

    if(
    $aendern == 0)
    {
        
    // nix passiert
        
    exit;
    }
    else
    {
        
    // einfügen der neuen Daten.
    }

    ?>
    Vom Aufbau her sollte alles stimmen - bei den Funktionen hab ich mal was gebastelt - weiss nicht ob es so funzt ^^.

    Mfg

    Kommentar


    • #3
      Danke für die Antwort
      Ich habe es auf eine ähnliche Art und Weise gelöst.
      Code:
      if ($data==$result)
      {
      }
      else
      {
      }
      Ich hatte gehoft, dass der Vergleich von mysql übernommen werden könnte.
      Das Array erst zu zerlegen und einzelnt zu prüfen frist mir zuviel cpu und belaste den Rest des Programmes. Ich habe bereits Laufzeitprobleme mit meiner Datenbank. Darum mache ich das ganze Tuning überhaupt.
      Danke
      Marc

      Kommentar


      • #4
        if ($data==$result)
        {
        }
        else
        {
        }
        Achja, stimmt, so gehts natürlich auch ^^ einfacher.

        Mfg wenigstens hab ich dich auf den Richtigen Weg gebracht.

        Kommentar

        Lädt...
        X