Если я вас поправлю, ваша главная задача - создать схему, которая поддерживает упорядоченные списки и , которые могут легко вставлять / переупорядочивать элементы.
Следующая схема таблицы:
id_list item_priority foreign_itemdef_id
1 1 245
1 2 32
1 3 45
2 1 156
2 2 248
2 3 127
, связанный с таблицей с определением элемента, будет легко запрашиваться, но его будет сложно обслуживать, особенно для вставок
Этот:
id_list first_item_id
1 45
2 38
, связанный со связаннымlist:
item_id next_item foreign_itemdef_id
45 381 56
381 NULL 59
38 39 89
39 42 78
42 NULL 45
Будет сложно запросить и update (вы должны обновить связанный список внутри транзакции, иначе ваш связанный список может быть поврежден).
Я бы предпочел первое решение для простоты.
В зависимости от частоты обновления вы можете рассмотреть возможность использования больших приращений между item_priority для облегчения вставки:
id_list item_priority foreign_itemdef_id
1 1000 245
1 2000 32
1 3000 45
2 1000 156
2 2000 248
2 3000 127
1 2500 46 -- late insertion
1 2750 47 -- late insertion
РЕДАКТИРОВАТЬ:
Вот запрос, который, как мы надеемся, освободит место для вставки: он увеличивает приоритет всех строк над аргументом
$query_make_room_for_new_item = "UPDATE item_priority_table SET item_priority = item_priority + 1 WHERE item_priority > ". $new_item_position_priority ." AND id_list = ".$id_list;
Затем вставьте ваш элемент с приоритетом $new_item_position_priority