One way to do it would be to add a table column "list_order" to store an order value. When you display the list, ORDER BY list_order.
To move an item up or down, you could use mysql_data_seek on the query result.
Set a $current_list_order var which is the current value of the row to be moved, then data seek up 1 (if moving the row up) or down 1 (if moving the row down) to get $new_list_order - ie the value of the row you "data seeked" to.
A couple of UPDATE queries can swap the list_order values of the row to be moved and the one immediately above/below it.
Don't forget you always need to add a list_order value for new rows. List_order could be an auto-increment column to do it automatically.