Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „MySql: UPDATE... ORDER BY“

netbandit

Aktives Mitglied

Hallo,

Folgendes; ich habe eine Tabelle mit Einträgen deren Reihenfolge beliebig festgelegt werden kann. Klappt auch soweit ganz gut, nur wie änder ich die Positionen wenn mitten drin ein Eintrag gelöscht wird?
Tabellenaufbau:

id |name |pos
1 |Eintrag 1 |3
2 |Eintrag 2 |2
3 |Eintrag 3 |4
4 |Eintrag 4 |1

Lösche ich jetzt id=2 bleiben die Positionen 1,3 und 4 übrig. Eigentlich bräuchte ich jetzt aber 1 bis 3 in der Tabelle. Das Einzige was mir jetzt dazu einfällt, ist die Tabelle auszulesen und in einer Schleife jeweils ein Update auszuführen... sind dann 1*Delete und 3*Update. Wären das jetzt 20,30 und mehr Einträge kämen natürlich entsprechend viele UPDATES zustande. Geht das auch in nur 1*DELETE und 1*UPDATE? :uhm:

Dachte da an so etwas wie:

UPDATE table SET pos=pos+1 ORDER BY pos

Wobei pos bei 1 starten sollte. Hat da einer ein Tipp?

Danke schonmal :)
 

d3221

Aktives Mitglied

AW: MySql: UPDATE... ORDER BY

Also irgendwie versteh ich nich was du willst xD Warum solltest du 2 löschen wenn dus brauchst o_O *verwirrt*
Soll der die Schleife abarbeiten und bei 1 beginnen oder was? Ich verstehs irgendwie nich xD
 

saila

Moderatorle

AW: MySql: UPDATE... ORDER BY

Im Grunde es das eigentl. egal, da das Array aus der Anfrage mit "ORDER BY id ASC" oder "ORDER BY Pos ASC" automatisch 1,3,4 usw. die entsprechende Sortierung vornimmt.

Interessanter wird es, wenn du einen neuen Eintrag vornimmst. Dann könnte es passieren, das die id 2 erneut belegt wird und somit möglicherweise die Reihenfolge nicht mehr korrekt aufgebaut wird. Allerdings ist in deinem Fall davon auszugehen, das du die Spalte POS mit einem Wert füllst, welcher von dir vorgegeben wird. Somit läge dann die mögliche Fehlerquelle bei dir.
 

netbandit

Aktives Mitglied

AW: MySql: UPDATE... ORDER BY

Nicht schlimm :)
id=2 wird gelöscht die Position hätte auch 1 sein können, in dem Fall wären die Positionen 2-4 übrig geblieben. Geht hier also nur um "pos"

Habe eben noch etwas gefunden:

PHP:
SET @pos=0;
UPDATE table SET pos = ( SELECT @pos := @pos +1 )
ORDER BY pos ASC
Jetzt weiss ich allerdings nicht, wie ich das in PHP verpacke :lol:

PHP:
mysql_query('SET @pos=0; UPDATE table SET pos = ( SELECT @pos := @pos +1 ) ORDER BY pos ASC');
geht schon mal nicht :rolleyes:

Edit:

PHP:
mysql_query('SET @pos=0');
mysql_query('UPDATE table SET pos = ( SELECT @pos := @pos +1 ) ORDER BY pos ASC');
Geht "scheinbar", muss ich mal weiter beobachten! :)
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.158
Beiträge
2.581.874
Mitglieder
67.225
Neuestes Mitglied
Petra
Oben