PHP / MySQL Datensatz "vertauschen"
Olaf Heinrich
- php
Hallo zusammen,
nachdem ich bei Google nur Codeschnipsel gefunden habe mit denen ich ncihts anfangen kann,m versuche ich mein Problem mal in diesem Forum zu lösen.
Folgende Ausgangssituation. In einer Tabelle mit dem NAmen "tbl_projekte" sind Datensätze gespeichert. Diese werden mit dem Primärschlüssel "prj_ID" indentifiziert und über die Spalte "prj_SortID" sortiert ausgegeben. Eben der Sortierreihenfolge ihrer Positionen.
Beispiel:
prj_ID | prj_SortID | prj_Head
5 | 3 | Datensatz 10...
4 | 4 | Datensatz XY...
9 | 5 | Noch ein Datensatz...
Nun möchte ich den Datensatz mit der prj_ID 4, also auf der aktuellen Position 4 um mit dem Datendatz prj_ID 5 vertauschen. Das sich diese Sortierung bei der Ausgabe ergibt:
prj_ID | prj_SortID | prj_Head
4 | 4 | Datensatz XY...
5 | 3 | Datensatz 10...
9 | 5 | Noch ein Datensatz...
Soweit klar? Gut, denn mir ist der Weg dahin nicht klar. Es geht über die MySQL Anweisung "UPDATE". Schon klar. Wenn da jemand ein Codebeispiel für mich hätte, wäre ich dankbar, denn Codeschnipsel habe ich reichlich gefunden, nur leider irgendwie steige ich durch diese nicht durch, weil sie immer nur Bruchteile von Informationen enthalten.
Lieben Dank schon mal im Voraus,
Olli
prj_ID | prj_SortID | prj_Head
5 | 3 | Datensatz 10...
4 | 4 | Datensatz XY...
9 | 5 | Noch ein Datensatz...Nun möchte ich den Datensatz mit der prj_ID 4, also auf der aktuellen Position 4 um mit dem Datendatz prj_ID 5 vertauschen. Das sich diese Sortierung bei der Ausgabe ergibt:
prj_ID | prj_SortID | prj_Head
4 | 4 | Datensatz XY...
5 | 3 | Datensatz 10...
9 | 5 | Noch ein Datensatz...
Soweit klar? Gut, denn mir ist der Weg dahin nicht klar. Es geht über die MySQL Anweisung "UPDATE". Schon klar. Wenn da jemand ein Codebeispiel für mich hätte, wäre ich dankbar, denn Codeschnipsel habe ich reichlich gefunden, nur leider irgendwie steige ich durch diese nicht durch, weil sie immer nur Bruchteile von Informationen enthalten.
ich sags mal so - dein im beispiel beschriebenes vorhaben scheint sinnfrei zu sein (beide tabellenbeispiele enthalten absolut identische datensätze), da du nur die sortierreihenfolge innerhalb der tabelle (datenbankintern) beeinflusst, diese ist aber völlig irrelevant (egal wie du argumentierst), relevant ist lediglich die ausgabe - und diese ist mit ORDER BY problemlos beeinflussbar
imho wäre sinnvoll wäre zb die prj_SortID der beiden datensätze zu tauschen
imho wäre sinnvoll wäre zb die prj_SortID der beiden datensätze zu tauschen
genau und zwar, wie du schon richtig erkannt hast mit UPDATE.
Ausnahmsweise:
UPDATE tbl\_projekte
SET prj\_SortID
=4 WHERE prj\_ID
=5;
UPDATE tbl\_projekte
SET prj\_SortID
=3 WHERE prj\_ID
=4;
Hello,
imho wäre sinnvoll wäre zb die prj_SortID der beiden datensätze zu tauschen
genau und zwar, wie du schon richtig erkannt hast mit UPDATE.
Ausnahmsweise:
UPDATEtbl\_projekte
SETprj\_SortID
=4 WHEREprj\_ID
=5;
UPDATEtbl\_projekte
SETprj\_SortID
=3 WHEREprj\_ID
=4;
Ist Dir aufgefallen, dass Du nun die ganze Sortierung durcheinander gebracht hast? ;-)
Ein Tausch mit zwei Statements funktioniert nur sicher, wenn
Die ID hast Du benutzt...
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
Hello,
prj_ID | prj_SortID | prj_Head
4 | 4 | Datensatz XY...
5 | 3 | Datensatz 10...
9 | 5 | Noch ein Datensatz...
Wichtig ist nur, dies in einem Statement zu schaffen, damit keine Konsitenzlücke entsteht.
update tbl_projekte set prj_SortId = if(prj_SortId=5,4,5) where prj_sortid in (4,5);
oder es gibt auch noch einen Ansatz mit einer Rechnung:
update tbl_projekte set prj_SortId = (4+5)-prj_SortId where prj_sortid in (4,5);
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg