André Laugks: Reihenfolge ändern?

Beitrag lesen

Hallo!

wenn meine tabelle zb. so aussieht:
+---------+------+
| name    | sort | id
+---------+------+
| Karin   |    1 | 7
| Heidi   |    2 | 6
| Andreas |    3 | 10
| Josef   |    4 | 3
+---------+------+

und jetzt will ich Andreas an 1. stelle haben. wie würde dann das mysql-statement aussehen?

Mit nur einem SQL-Statement geht das nicht. Der Tabelle sollte noch eine weite Spalte mit eine ID für jeden Datensatz bekommen, die Auto-Increment ist. Ich habe das mal in Deinem Beispiel eingefügt. Die benötigt man, um sich auf den Datensatz zu beziehen. Ich nehme mal an, die Tabelle hat 10 Datensätze.

Andreas -> 1
============== Datensatz bekommt kleinere sort-Nr. ====================
1. UPDATE tabelle SET sort=sort+1 WHERE sort>=1 AND sort<3;
2. UPDATE tabelle SET sort=1 WHERE id=10;

zu 1
==>> Wenn Datensatz eine kleinere sort-Nr. bekommen soll.
Alle sort-Nr. bis zur 3 werden um eins erhöht.
-> 1 wird zu 2
-> 2 wird zu 3
-> 4 bleibt 4
-> usw.

zu 2.
Dem Datensatz wird die sort-Nr. 1 "zugeteilt".

Andreas -> 7
============== Datensatz bekommt höhere sort-Nr. ====================
1. UPDATE tabelle SET sort=sort-1 WHERE sort>3 AND sort<=7;
2. UPDATE tabelle SET sort=7 WHERE id=10;
zu 1
==>> Wenn Datensatz eine höhere sort-Nr. bekommen soll.

  • Andreas soll von 3 auf 7
    -> 1 bleibt
    -> 2 bleibt
    -> 3 wird nicht berührt
    -> 4 wird zu 3
    -> 5 wird zu 4
    -> 6 wird zu 5
    -> 7 wird zu 6
    -> 8 bleibt 8
    -> usw.

zu 2.
Dem Datensatz wird die sort-Nr. 7 "zugeteilt".

Bei diesem Beispiel muß Du natürlich testen, ob man den Platz vergeben kann. Keine Ahnung ob das gut geht, wenn man einem Datensatz die sort-Nr. 21 gibt, wenn man nur 10 Datensätze hat. Ich meine, daß müßte schief gehen. Die nachfolgenden Sortieren, wenn eine höhere sort-Nr. vergeben wird, stimmen dann nicht ganz. Müßte man testen, bin mir nicht ganz sicher.

MfG, André Laugks

--
L-Andre @ gmx.de