calconeon: Navigation sortieren / verschieben

Folgendes Problem: (ich denk, wenn ihr auch nicht gleich seht, selbst nochmal diese Nacht drüber nach ^^, will euch ja nicht für mich arbeiten lassen ^^)

Meine Tabellenstruktur für die Datenbank nav, in der die Naviation drin ist:

id          int(3)
id_sub        int(3)
id_forward    int(3)
ebene         int(1)
name         varchar(70)
active        enum('0', '1')
template      varchar(50)
head         varchar(100)
frage         varchar(150)
pos         int(3)

Die Abfrage für den öffentlichen Bereich der Schul-Homepage:

SELECT *
FROM nav
WHERE (id_sub=id OR id_sub=$id_top)
    AND (active=2 OR id=id_sub)
ORDER BY id_sub,ebene,pos

(nur aktive Punkte, Unterpunkte nur wenn jew. Überpunkt aktiv ist)

Abfrage für alles im Verwatungsmenü, wo unter anderem die Punkte verschoben werden sollen:

SELECT *
FROM nav
ORDER BY id_sub,ebene,pos

Wenn ich auf einen entsprechenden Verschieben-Button drücke, passiert folgendes:

if($arrow == 'dn')
  {
   $sql_scroll1 = "UPDATE nav
                   SET pos=pos+1
                   WHERE id=$id
      ";
   $sql_scroll2 = "UPDATE nav
                   SET pos=pos-1
                   WHERE id=$id+1
                  ";
  }
  else
  {
   $sql_scroll1 = "UPDATE nav
                   SET pos=pos-1
                   WHERE id=$id
      ";

$sql_scroll2 = "UPDATE nav
                   SET pos=pos+1
                   WHERE id=$id-1;
                  ";
  }

ABER: Wenn ich verschieben, tritt statt einem Fall immer mal einer von dreien statt: Es funktioniert ( :) ); Es springt woanders hin  ( :(  ); Es passiert nix (  :( :(  ).

Wo ist jetzt mein Denkfehler??? Ich habe entweder die Sortierung oder die Verschiebung falsch gemacht.