Vergleichen und Wert erhöhren
Konstanza
- php
1 ChrisB0 Tom0 Vinzenz Mai0 Tom0 Vinzenz Mai
Hallo,
folgende Frage stellt sich. Ich habe eine Quelldatei aus der ich mehrmals täglich Werte auslese und in eine Datenbank schreibe.
Nun ist mir aufgefallen das es vorkommt das zwischen verschiedenen Auslesevorgängen Werte häufiger auftreten.
Anstatt sie nun einfach in die Datenbank zu übertragen möchte ich nun vorher prüfen ob sie schon in der Datenbank existieren und für den Fall das den Datenbankwert "haufigkeit" +1 setzen (sprich den existierenden Wert + die Zahl 1).
Hier mein bisheriger Quelltext, vielleicht hat jemand eine Idee.
include("db.php");
$hauefigkeit = "1";
$quelle = @file('test.html');
$data = implode ("", $quelle);
preg_match_all("|<li><a href(.*)</a></li>|Uism",$data, $items, PREG_PATTERN_ORDER);
if (count($items[1])==0) {
preg_match_all("|<item .*>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
}
for ($i=0; $i<count($items[1]); $i++) {
preg_match_all("|<span>(.*)</span>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
$ausgabe= $regs[1][0];
echo $ausgabe;
$eintrag = "INSERT INTO test (keyword, haeufigkeit) VALUES ('$regs[1][0]', '$hauefigkeit')";
$eintragen = mysql_query($eintrag);
}
?>
Hi,
Nun ist mir aufgefallen das es vorkommt das zwischen verschiedenen Auslesevorgängen Werte häufiger auftreten.
Anstatt sie nun einfach in die Datenbank zu übertragen möchte ich nun vorher prüfen ob sie schon in der Datenbank existieren und für den Fall das den Datenbankwert "haufigkeit" +1 setzen (sprich den existierenden Wert + die Zahl 1).
Dann frage vorher ab, ob es zum Wert schon einen Eintrag gibt.
Wenn ja, erhoehe dessen Haeufigkeit um eins, wenn nicht, dann fuege ihn neu mit Haeufigkeit 1 ein.
MfG ChrisB
Hello,
zur Aufgabenstellung könnte diese Siete passen:
http://dev.mysql.com/doc/refman/5.1/en/replace.html
MySQL bietet einen REPLACE Befehl an aber auch die alternative
Möglichkeit: INSERT ... ON DUPLICATE KEY UPDATE.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hallo,
zur Aufgabenstellung könnte diese Siete passen:
wieso? Ich kann mir hier keine sinnvolle Anwendung von REPLACE vorstellen, ...
MySQL bietet [...] aber auch die alternative
Möglichkeit: INSERT ... ON DUPLICATE KEY UPDATE.
... das passt hingegen genau (erstes Beispiel).
Freundliche Grüße
Vinzenz
Hello,
MySQL bietet [...] aber auch die alternative
Möglichkeit: INSERT ... ON DUPLICATE KEY UPDATE.... das passt hingegen genau (erstes Beispiel).
habe ich was anderes behauptet?
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hallo,
MySQL bietet [...] aber auch die alternative
Möglichkeit: INSERT ... ON DUPLICATE KEY UPDATE.... das passt hingegen genau (erstes Beispiel).
habe ich was anderes behauptet?
ich hätte aus Deinem Posting geschlossen, dass Konstanza REPLACE verwenden sollte, schließlich hast Du dies im Gegensatz zu INSERT ... ON DUPLICATE KEY UPDATE verlinkt. REPLACE halte ich jedoch für den Anwendungsfall für völlig ungeeignet - ich hätte daher REPLACE überhaupt nicht erwähnt und erst recht keinen Link auf die Seite gesetzt. Ich fand Deinen Beitrag daher ein klein wenig irreführend und ich habe ihn zielführend ergänzt.
Freundliche Grüße
Vinzenz
Hello,
ich hätte aus Deinem Posting geschlossen, dass Konstanza REPLACE verwenden sollte, schließlich hast Du dies im Gegensatz zu INSERT ... ON DUPLICATE KEY UPDATE verlinkt. REPLACE halte ich jedoch für den Anwendungsfall für völlig ungeeignet - ich hätte daher REPLACE überhaupt nicht erwähnt und erst recht keinen Link auf die Seite gesetzt. Ich fand Deinen Beitrag daher ein klein wenig irreführend und ich habe ihn zielführend ergänzt.
Ja, sorry, irreführen wollte ich natürlich niemanden.
Aber wenn man die verlinkte Seite durchliest, kommt kan ja an die von mir erwähnte Stelle.
So war es auch gemeint.
Also nochmal zur Klarstellung http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
Das ist auf jeden Fall die passende Lösung.
Erst in der Datenbank mot Select zu suchen, um dann alternativ ein Update oder ein Insert vorzunehmen ist jedenfalls keine gute Lösung, weil man meistens ein Zeitdifferenz-Problem ("TOCTOU") baut damit.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hallo,
leider ist mein Englisch nicht ausreichend um das zu verstehen. Auch die Google Übersetzung bringt mich nicht wirklich weiter.
Muss ich zuerst die Abfrage über
$abfrage = "SELECT * FROM test WHERE name LIKE
'$ausgabe'";
prüfen und dann den Befehl ausführen???
Ich bin als Laie hoffnungslos überfragt...
Hallo,
leider ist mein Englisch nicht ausreichend um das zu verstehen. Auch die Google Übersetzung bringt mich nicht wirklich weiter.
wie wäre es mit dem leicht zu findenden deutschen Handbuch der Version 5.1 (das ich ungern verlinke, da die Version 5.0 derzeit die aktuelle Version ist und das deutsche Handbuch nicht so ausführlich ist wie die Originalversion - und leider gelegentlich Fehler enthält).
Muss ich zuerst die Abfrage über
$abfrage = "SELECT * FROM test WHERE name LIKE
'$ausgabe'";
prüfen und dann den Befehl ausführen???
wie Tom und ich beide ausgeführt haben, ist dies nicht nötig - ja überhaupt nicht empfehlenswert. Einfach
INSERT ...
ON DUPLICATE KEY UPDATE
verwenden.
Freundliche Grüße
Vinzenz