MYSQL Befehl INSERT INTO mit Bedinung
Hella naturell
- datenbank
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...
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
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?
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
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