Anzeige

MySql: UPDATE... ORDER BY

MySql: UPDATE... ORDER BY | PSD-Tutorials.de

Erstellt von netbandit, 14.10.2008.

  1. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    MySql: UPDATE... ORDER BY
    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 :)
     
    #1      
  2. d3221

    d3221 Aktives Mitglied

    Dabei seit:
    08.09.2006
    Beiträge:
    576
    Geschlecht:
    männlich
    Ort:
    nähe Frankfurt a.M.
    Software:
    PS CS5, DW CS5, FL CS5
    MySql: UPDATE... ORDER BY
    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
     
    #2      
  3. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    MySql: UPDATE... ORDER BY
    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.
     
    #3      
  4. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    MySql: UPDATE... ORDER BY
    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:
    1.  
    2. SET @pos=0;
    3. UPDATE table SET pos = ( SELECT @pos := @pos +1 )
    4. ORDER BY pos ASC
    5.  
    Jetzt weiss ich allerdings nicht, wie ich das in PHP verpacke :lol:

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

    Edit:

    PHP:
    1.  
    2. mysql_query('SET @pos=0');
    3. mysql_query('UPDATE table SET pos = ( SELECT @pos := @pos +1 ) ORDER BY pos ASC');
    4.  
    Geht "scheinbar", muss ich mal weiter beobachten! :)
     
    Zuletzt bearbeitet: 14.10.2008
    #4      
x
×
×
teststefan