UPDATE: mehrere Vorkommen ändern
Sandra
- datenbank
Hallo Forumler,
ich stehe mit Datenbanken noch recht am Anfang meiner 'Karriere', und bräuchte mal etwas Hilfe:
Ich möchte in einer bestehenden Datenbank eine bestimmte Spalte auf einen Wert prüfen, und bei 'true' diesen Wert ändern.
Mein (fehlgeschlagener) Versuch war folgender:
$aendern = "UPDATE tabellenname Set spalte = ".$neuerstring." WHERE title = alterstring";
$update = mysql_query($aendern);
Ein Danke mit lieben Gruß!
Sandra.
ich stehe mit Datenbanken noch recht am Anfang meiner 'Karriere', und bräuchte mal etwas Hilfe:
Dann gewöhne Dir gleich eine Fehlerbhandlung an (Rückgabewert von mysql_query auswerten und ggf. mysql_error() anzeigen lassen) und laß Dir bei Problemen das SQL-Statment ausgeben.
Ich möchte in einer bestehenden Datenbank eine bestimmte Spalte auf einen Wert prüfen, und bei 'true' diesen Wert ändern.
Mein (fehlgeschlagener) Versuch war folgender:
Wie äußert sich das Fehlschlagen?
Danke für dein schnelles Antworten!
Wie äußert sich das Fehlschlagen?
Fehlschlagen in Form von "Fehler" gibt es nicht, es passiert nur einfach nichts ;-)
Ich hab das Problem aber nun selbst lösen können:
$aendern = "UPDATE tabelle Set spalte = REPLACE(spalte, 'alterstring', 'neuerstring')";
...manchmal isses sooo einfach!
lG Sandra.
Ich hab das Problem aber nun selbst lösen können:
Wenn Du mich fragst, Du hast kein Problem gelöst und wir werden wahrscheinlich wieder von Dir lesen sobald Du daß nächste mal das Problem nicht löst.
hmm... das is schlecht!
Es funktioniert zwar (kleine DB mit max 50 Einträgen), aber dass so alle Daten ersetzt werden war mir nicht bewusst.
Aufgabenstellung ist folgende:
Tabelle "Welten" mit mehreren Spalten:
id :: title :: text :: date
1 Meer blau 2009/05/01
2 Wüste rot 2009/05/01
3 Wald grün 2009/05/01
4 Wüste heiß 2009/05/02
5
.
.
nun soll ::title:: nach "Wüste" durchsucht werden und bei Übereinstimmung mit "Wüste Gobi" ersetzt werden.
(beim nächsten Durchlauf soll dann "Wüste Gobi" gesucht werden und mit "Wüste Sahara" ersetzt werden...usw.)
Mein erster Gedanke war:~~~php
$aendern = "UPDATE Welten Set title= 'Wüste Gobi' WHERE title = 'Wüste'";
Ich mache es im Moment so (falsch):~~~php
$aendern = "UPDATE Welten Set title= REPLACE(title, 'Wüste', 'Wüste Gobi')";
Mein erster Gedanke war:~~~php
$aendern = "UPDATE Welten Set title= 'Wüste Gobi' WHERE title = 'Wüste'";
Und was gibt mysql\_query($aendern); zurück?
Liefert "SELECT title FROM Welten WHERE title = 'Wüste'" überhaupt Ergebnisse?
Hallo,
$aendern = "UPDATE tabelle Set spalte = REPLACE(spalte, 'alterstring', 'neuerstring')";
... mit Verlaub, aber das ist nicht wirklich eine "Lösung". Du änderst damit quasi JEDEN Datensatz und nicht nur die, die du willst, die betroffen sein sollten.. Wenn deine Tabelle nur 3 Einträge hat, dann mag sich das nicht so negativ äussern, aber bei einigen Tausend Einträgen wohl schon.
In deinem Ausgangsbeitrag schriebst du
$aendern = "UPDATE tabellenname SET spalte = '".$neuerstring."' WHERE title='".$alterstring."'";
Es wird also nach EXAKTEN Übereinstimmungen in der Spalte "title" gesucht. Vielleicht hast du in der falschen Spalte gesucht. Auch das Ergebnis der beiden UPDATE statements ist schon von grund auf unterschiedlich: Bei der ursprünglichen Version wird der komplette Wert von der Tabellenspalte "spalte" durch den Wert aus $neuerstring ersetzt wo der Wert aus der Spalte "title" exakt dem Wert aus $alterstring entsprich. Bei deiner überarbeiten Version wird für jeden Datensatz die Spalte "spalte" nach dem Wert $alterstring durchsucht und ggf dieses Teilstück durch den Wert aus $neuerstring ersetzt. Wenn das Teilstück nicht gefunden wird, wird der Wert in der Spalte mit sich selbst ersetzt.
Was war denn die genaue Aufgabenstellung?
So long, Frank