You add new column to your table. This collumn will contain id of previous menu item.
This mean that in begining you will write your menu items in database in order you want them to display:
id, previous_id
1,0
2,1
3,2
4,3
5,4
6,5
7,6
8,7
9,8,
10,9
This means that menu item with id 2 will go after menu item with number 1. Menu item with number 3 will go after menu item with number 2 and so on.
You also need special value for first menu item, because it will have no "previous item" (you can use 0 like in my example).
Now, lets say you need to add menu item that will show as fifth. If you will not use previous_id, you need to do 10 updates and 1 insert (= 11 operations).
But if you have previous_id in your table, you need to do just 2 operations - update currently fifth menu item and tell him that it will go after new menu item and insert new menu item and tell him that it will be fifth (it means that it will go after 4th). So your table will look like this:
id, previous_id
1,0
2,1
3,2
4,3
5,11 -- updated
6,5
7,6
8,7
9,8,
10,9
11,4 -- inserted
SQL something like this:
update menu
set previous_id = 11
where id = 5
insert into menu
values(11,4)