Hella naturell: MYSQL Befehl INSERT INTO mit Bedinung

Hallo,
ich habe eine für mich sehr verzwicket Sache ich führe mit php folgenden code aus:

$eintrag = "INSERT INTO tabelle1 (text, zaeler) VALUES ('$ausgabe', '$zaeler') ON DUPLICATE KEY UPDATE `zaeler` = `zaeler` + 1";  
$eintragen = mysql_query($eintrag);  
}

Ich möchte aber nun eine weitere Bedinung einfügen:
// generiere Datum von heute
$datum = date("Ymd");
// prüfe ob zum text schon ein eintrag mit dem Datum von heute existiert
// wenn ja upate den zaeler +1
// wenn nein lege den Datensatz an.

Aber ich habe keine Ahnung wie ich das generieren kann...

  1. Hallo,

    ich habe eine für mich sehr verzwicket Sache ich führe mit php folgenden code aus:

    $eintrag = "INSERT INTO tabelle1 (text, zaeler) VALUES ('$ausgabe', '$zaeler') ON DUPLICATE KEY UPDATE zaeler = zaeler + 1";

    $eintragen = mysql_query($eintrag);
    }

      
    der anfällig für [SQL-Injection](http://de.wikipedia.org/wiki/SQL-Injection) ist. Bitte verwende [mysql_real_escape_string()](http://www.php.net/manual/de/function.mysql-real-escape-string.php), um Variableninhalte für den SQL-Kontext aufzubereiten. Mache gegebenenfalls die Auswirkungen des gut gemeinten PHP-Features [Magic Quotes](http://www.php.net/manual/de/security.magicquotes.php) rückgängig.  
      
    
    > Ich möchte aber nun eine weitere Bedinung einfügen:  
    > // generiere Datum von heute  
      
    Dafür gibt es [CURDATE()](http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_curdate) (und Synonyme). Es ist auf jeden Fall eine hervorragende Idee, zum Speichern von Datumsangaben in MySQL den dafür passenden Datentyp DATE zu verwenden.  
      
    
    > `$datum = date("Ymd");`{:.language-php}  
    > // prüfe ob zum text schon ein eintrag mit dem Datum von heute existiert  
    > // wenn ja upate den zaeler +1  
    > // wenn nein lege den Datensatz an.  
      
    MySQL bietet Dir dafür [INSERT ... ON DUPLICATE KEY UPDATE](http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html). Sorge daher für einen UNIQUE-Index über die beiden Spalten.  
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Hallo,

      vielen Dank für die Tipps den Großteil habe ich umgesetzt. Aber bei

      MySQL bietet Dir dafür INSERT ... ON DUPLICATE KEY UPDATE. Sorge daher für einen UNIQUE-Index über die beiden Spalten.

      stehe ich auf dem Schlauch wie genau meinst du das?

      1. Hi,

        MySQL bietet Dir dafür INSERT ... ON DUPLICATE KEY UPDATE. Sorge daher für einen UNIQUE-Index über die beiden Spalten.

        stehe ich auf dem Schlauch wie genau meinst du das?

        ON DUPLICATE KEY "wirkt" dann, wenn ein neu eingefuegter Datensatz fuer den Primary Keu oder einen Unique Index die gleichen Werte hat, wie ein bereits bestehender.

        Also lege einen Unique Index an, der auch das Datum enthaelt.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
      2. Hallo,

        MySQL bietet Dir dafür INSERT ... ON DUPLICATE KEY UPDATE. Sorge daher für einen UNIQUE-Index über die beiden Spalten.

        stehe ich auf dem Schlauch wie genau meinst du das?

        Die MySQL-Doku zu CREATE INDEX zeigt, wie das geht, ich zitiere:

        "A column list of the form (col1,col2,...)  creates a multiple-column index."

        Da Du je Tag und Text genau einen Eintrag haben willst, bietet sich ein UNIQUE-Index auf diese Spaltenkombination an. Ein

        INSERT INTO tabelle1 (  
            text,  
            datum,  
            zaehler  
        ) VALUES (  
            <dein aufbereiteter text>,  
            CURDATE(),  
            <dein zaehler>             -- sollte dieser beim INSERT nicht 1 sein?  
        )  
        ON DUPLICATE KEY UPDATE        -- wenn die Kombination von text und datum  
                                       -- schon vorhanden ist  
            zaehler = zaehler + 1      -- erhöhe nur den Zähler  
        
        

        so wie Du es in Deinem Ausgangsbeitrag (bis auf die Datumsspalte) bereits hattest.

        Freundliche Grüße

        Vinzenz