mysql update viele Einträge in einem Rutsch
Henry
- mysql
- php
Hallo,
Mein Gedächnis lässt mich wieder mal im Stich und so hoffe ich während ich weiter suche, dass ein schnelle Antwort mich erlöst.
Ich habe eine Liste von verschiedenen kleinen strings, zb. xc3r4,eewe2343,s23,drdf,usw. Die entsprechen einer Spalte/Feld einer Tabelle in Mysql. Nun möchte ich ein anderes Feld der jweiligen Reihe (wo dieser String) enthalten ist ändern mit einem einheitlichen Wert.
Entstpricht also. "update xy set feldx=1 where feld_id = 's23';"
Nur eben für alle gleichzeitig. Ich weiss so was habe ich immer mit where IN oder so ähnlich gemacht, und da der Begriff IN aufgrund der wenigen Buchstaben kaum in dem Zusammenhang zu finden ist, frage ich jetzt hier.
Gruss
Henry
Nachtrag:
Kann es sein, dass es so simpel ist?
update xyz set feldx=1 where feldy IN ('xc3r4', 'eewe2343', 's23', 'drdf');
oder gibts einen sinnvolleren Weg für diese Bulkoperation?
Gruss
Henry
Hallo,
Kann es sein, dass es so simpel ist?
in Ausnahmefällen ;)
update xyz set feldx=1 where feldy IN ('xc3r4', 'eewe2343', 's23', 'drdf');
oder gibts einen sinnvolleren Weg für diese Bulkoperation?
Das wirkt erstmal sehr kompakt und wenn es das tut, was du möchtest, lässt du es so.
Falls die Liste im IN (…)
sehr viel länger werden sollte, könnte man über eine doppelte Negierung nachdenken, aber das würde auch verschleiern, was du eigentlich suchst.
Gruß
Kalk
Hallo Tabellenkalk,
danke erstmal. Kommen noch ein paar Fragen. 😉
Ein Problem tut sich gerade auf, was ich nicht verstehe.
select distinct(feld1) from xyz...
ergibt 400 Einträge
Diese Abfrage aber mit
select distinct(feld1),f2,f3,f4 from xyz...
ergibt 500 Einträge
Versteh ich DISTINCT falsch? Dachte feld1 Einträge würden durch distict angezeigt ohne die Doppelten, will ich aber mehr sehen als nur feld1, dann können es doch nicht mehr Einträge werden. Ist aber so, wo ist mein Denkfehler?
Nachtrag:
Sehe gerade, mit den anderen Feldern, scheinen sich auch wieder doppelte eingeschlichen zu haben. Bedeutet das dann, das Distinct hier in Kombi nicht funktioniert?
Gruss
Henry
Tach!
Ein Problem tut sich gerade auf, was ich nicht verstehe.
select distinct(feld1) from xyz...
ergibt 400 Einträge
Diese Abfrage aber mit
select distinct(feld1),f2,f3,f4 from xyz...
ergibt 500 Einträge
Versteh ich DISTINCT falsch?
Ja. DISTINCT ist keine Funktion. Es wirkt auf die gesamte Zeile.
Die Klammern sind syntaktisch richtig, aber sie klammern lediglich das feld1. Sie wirken wie Klammern um x-beliebige Ausdrücke und werden ignoriert, wenn sie keine Prioritäten festlegen. Beispielsweise ist x=(y)
dasselbe wie x=y
.
... wo ist mein Denkfehler?
Für mich ist das Verwenden von DISTINCT meist ein Zeichen dafür, dass man die Ergebnismenge beim Where und beim Joinen nicht genug eingeschränkt hat.
dedlfix.