Seite 1 von 1
MySQL: UPDATE über mehrere Zeilen?
Verfasst: 20.08.2006, 16:03
von Daniela
Kann man in MySQL ein UPDATE über mehrere Zeilen machen, wenn jede Zeile mit anderen Daten upgedatet wird?
Beispiel:
Tabelle mit vielen Suchbegriffen. Ich möchte diese nun in eine zweite Spalte kopieren, mit PHP jedoch auf Kleinschreibung konvertieren, Leerzeichen mit Bindestriche ersetzen und einige Zeichen löschen.
"Blue Widget" -> "blue-widget"
"Red Car" -> "red-car"
Muss ich das nun Zeile für Zeile updaten oder kann ich das irgendwie zusammenfassen?
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 20.08.2006, 16:20
von Boa
UPDATE tabelle SET irgendwas = REPLACE(REPLACE(irgendwas, 'Blue Widget', 'blue-widget'), 'Red Car', 'red-car')
Verfasst: 20.08.2006, 17:16
von Southmedia
Wird anstrengend wenn man ein paar tausend Einträge hat, oder callimann

?
Eine weitere Möglichkeit:
https://dev.mysql.com/doc/refman/5.0/en ... html#c6075
Verfasst: 21.08.2006, 02:12
von Southmedia
Da ich es gerade eben selbst genutzt habe, hier noch ein anderer Weg um recht schnell viele Zeilen einer Tabelle upzudaten. Es geht auf jeden Fall schneller als jede Zeile einzeln upzudaten.
Ich nehme mal die Spaltennamen "keyword" für "Red Widget" und "urlstring" für "red-widget", die Tabelle heisst 'keywords':
1. Lege eine temporäre Tabelle 'urlstrings' an. Sie besteht aus den Feldern 'id' und 'urlstring'.
2. Füge in 'urlstrings' jeweils die ID aus 'keywords' und den nun generierten urlstring ein. Fasse mehrere INSERTs zusammen:
Code: Alles auswählen
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
3. Kopiere die Daten aus 'urlstrings' rüber in 'keywords':
Code: Alles auswählen
UPDATE keywords JOIN urlstrings ON keywords.id = urlstrings.id SET keywords.urlstring = urlstrings.urlstring
4. Lösche die temporäre Tabelle 'urlstrings'.
5. Freuen.
Verfasst: 27.11.2006, 22:07
von Shamrock
Ich habe folgendes problem:
ich habe eine datenbank mit verschiedenen artikeln die alle eine eigene id haben. bisher hatte ich immer eine übersichtsseite mit aufzählung der produkte. durch anklicken komme ich zur detailansicht in der ich dann die werte ändern kann. jetzt will ich aber eine unmenge an zeit sparen und die wichtigsten werte in dieser übersicht anzeigen und auch gleich ändern können.
habe dazu folgenden code:
Code: Alles auswählen
$sites = mysql_query("SELECT id,title FROM sites");
while ($row = mysql_fetch_array($sites, MYSQL_NUM)) {
mysql_query("UPDATE sites SET title='".$_POST["title"]."' WHERE ID='$row[0]';");
echo mysql_error();
Die tabelle heisst "sites" und ich lese die parameter "id" und "title" aus.
und das formular:
Code: Alles auswählen
<form action="<? echo $PHP_SELF;?>" method="post">
<input type="text" name="title" size="40" value="<? echo $row_sites[title]; ?>" />
<input type="hidden" name="save" value="yes">
<input type="submit" name="submit" value="Save all changes now!" />
</form>
mit dem ergebnis das er alle einträge leert.
register_globals sind on.
irgendwie muss ich ihm sagen dass er der reihe nach die zeilen durchgeht und wenn er neue werte hat soll er den eintrag in der datenbank updaten.
jemand eine idee?
Verfasst: 27.11.2006, 22:43
von net(t)worker
Shamrock hat geschrieben:
jemand eine idee?
joo... eine Idee kommt mir da sofort... beschreib doch einfach mal was du jetzt genau machen willst und wie die db aussieht...
Verfasst: 28.11.2006, 00:36
von Shamrock
Also die Tabelle heisst "sites"
Felder sind u.a.
- "id" als fortlaufende ID mit auto_increment
- "title" als varchar
und noch andere aber der einfachheit halber will ich nur mal die titel ändern.
Nochmal was ich will:
Derzeit lese ich aus der Datenbank die Produkte aus und gebe sie in einer Übersichtsseite als Liste wieder. Wenn ich etwas ändern will klicke ich auf ein Produkt in dieser Liste und kann in der Detailansicht alle Daten ändern. Das ist ja kein Problem da ich ja in der Detailansicht die jeweilige ID des Produktes habe und übergeben kann.
Da ich aber oft mehrere Änderungen vornehmen will, könnte ich das stark vereinfachen wenn ich gleich in dieser Übersichtsseite Werte ändern kann.
Problem dabei ist das ich offensichtlich nicht überrissen habe wie ich ihm sage dass er die IDs der Reihe nach durchgehen soll und alle Werte neu speichert. Er soll also beispielsweise von ID zu ID gehen und den in der Datenbank vorhandenen Wert "title" mit der aktuellen Eingabe in das Formularfeld "title" überschreiben.
Verfasst: 03.12.2006, 11:36
von nachfrag
moin Shamrock,
du musst zum einen in deinem Formular die Namen der Input Felder eindeutig machen, also statt
Code: Alles auswählen
<input type="text" name="title" size="40" value="<? echo $row_sites[title]; ?>" />
so:
Code: Alles auswählen
<input type="text" name="title_<? echo $row_sites[id]; ?>" size="40" value="<? echo $row_sites[title]; ?>" />
und zum anderen in der Auswertung dann darauf eingehen ... im Groben etwa so:
Code: Alles auswählen
foreach ($_POST as $key => $val) {
if (substr($key,0,6) == 'title_') {
$id = substr($key,6);
$title = $val;
usw. ... (formuliere Query und schreibs in die DB)
}
}
edit: hatte ne klammer vergessen
