Ja rozwiązałem ten problem w ten sposób: dodałem do tabeli kolumne `kolejnosc`
do zmiany kolejnosci uzywam takiej funkcji:
<?php
function zmien_kolejnosc($tabela, $kolumna, $id, $zmiana, $warunek=NULL, $kolumna_warunek=NULL)
/*
$tabela -> nazwa tabeli z danymi
$kolumna -> nazwa kolumny w ktorej są dane o kolejności (u mnie nazywa się `kolejnosc` :) )
$id -> id strony której położenie w np. menu (czyli kolejność) chcę zmienić
$zmiana -> przyjmuje wartosci \"gora\" albo \"dół\" - czyli przesunięcie w dół lub w górę
$warunek i $kolumna warunek -> jeśli ustawione dodają do zapytania to: where `'.$kolumna_warunek.'`=''.$warunek.'' '; dzięki czemu mogę zmieniać kolejność stron o np. id > 76 , albo tylko stron należących do określonej kategorii itp..
*/
{
if(isset($warunek)&&isset
($kolumna_warunek)) {
$where=' where `'.$kolumna_warunek.'`=''.$warunek.'' ';
}
$sql='select `id`, `'.$kolumna.'` from `'.$tabela.'`'.$where.' order by `'.$kolumna.'`';
{
$tablica[]=$odpowiedz;
}
//tutaj jest kod który \"naprawia\" kolejność - np. gdy mamu kolejność: 1,2,5,7,9 dane kolejności są przepisywane i dostaniemy -> 1,2,3,4,5 :)
foreach($tablica as $klucz => $wartosc)
{
$tablica[$klucz][$kolumna]=$klucz+1;
if($tablica[$klucz]['id']==$id)
{
$index=$klucz;
}
}
//koniec naprawy kolejnosci
if(($zmiana=='gora')&&(!$index==0))
{
$tablica[$index][$kolumna]=$tablica[$index][$kolumna]-1;
$tablica[$index-1][$kolumna]=$tablica[$index-1][$kolumna]+1;
}
elseif(($zmiana=='dol')&&!($index===$ilosc))
{
$tablica[$index][$kolumna]=$tablica[$index][$kolumna]+1;
$tablica[$index+1][$kolumna]=$tablica[$index+1][$kolumna]-1;
}
foreach($tablica as $wartosc)
{
$sql='update `'.$tabela.'` set `'.$kolumna.'`=''.$wartosc['kolejnosc'].'' where `id`=''.$wartosc['id'].'' limit 1';
}
}
?>
Pewnie są wydajniejsze i "ładniejsze" rozwiązania ale... to też działa

, używan tego na tabelach zawierających do 200 elementów i w zasadzie nie obserwuję jakichś zwiech ani wydłużenia ładowania strony prz zmianie klejności.