Zrobiłem sobie coś takiego, ale teraz zauważyłem, że jak chce ostatni rekord (z ostatnim position) podnieść do góry, to on zamienia się pozycją z pierwszym rekordem. Co robię nie tak?
if (isset($_GET['up'])) { $id = $_GET['up'];
$query = mysql_query("SELECT position FROM category_menu WHERE id = $id;"); $pos = $row['position'];
$query = mysql_query("SELECT id, position FROM category_menu WHERE position < $pos ORDER BY position ASC LIMIT 1;"); $id_n = $row['id'];
$pos_n = $row['position'];
mysql_query("UPDATE category_menu SET position = $pos_n WHERE id = $id;"); mysql_query("UPDATE category_menu SET position = $pos WHERE id = $id_n;"); }
if (isset($_GET['down'])) { $id = $_GET['down'];
$query = mysql_query("SELECT position FROM category_menu WHERE id = $id;"); $pos = $row['position'];
$query = mysql_query("SELECT id, position FROM category_menu WHERE position > $pos ORDER BY position ASC LIMIT 1;"); $id_n = $row['id'];
$pos_n = $row['position'];
mysql_query("UPDATE category_menu SET position = $pos_n WHERE id = $id;"); mysql_query("UPDATE category_menu SET position = $pos WHERE id = $id_n;"); }
Niestety nie mogę dać WHERE position < $pos-1 ponieważ może nie istnieć o 1 mniejsze, bo np. rekord był usunięty, więc chciałem zrobić z tym mniejsze większe, ale coś nie działa, jak należy.
@edit: Poradziłem sobie. Dla zainteresowanych, jak problem został rozwiązany już mówię. Otóż w przenoszeniu do góry zrobiłem sortowanie od tyłu (czyli nie ASC, a dałem DESC). Ot cała filozofia. Teraz działa poprawnie.