Что вы можете сделать, это создать таблицу с ключами (member_id, position), которая сопоставляется с другим member_id. Затем вы можете сохранить порядок в этой таблице отдельно от самого списка участников. (Каждый участник сохраняет свой собственный порядок списков, что, как я полагаю, вы хотите ...?)
Предположим, что у вас есть следующая таблица членов:
+-----------+--------------+
| member_id | name |
+-----------+--------------+
| 1 | John Smith |
| 2 | John Doe |
| 3 | John Johnson |
| 4 | Sue Someone |
+-----------+--------------+
Тогда у вас может быть таблица заказов, подобная этой:
+---------------+----------+-----------------+
| member_id_key | position | member_id_value |
+---------------+----------+-----------------+
| 1 | 1 | 4 |
| 1 | 2 | 1 |
| 1 | 3 | 3 |
| 1 | 4 | 2 |
| 2 | 2 | 1 |
| 2 | 3 | 2 |
+---------------+----------+-----------------+
Вы можете выбрать список участников с учетом сохраненного порядка, используя внутреннее объединение. Например:
SELECT name
FROM members inner join orderings
ON members.member_id = orderings.member_id_value
WHERE orderings.member_id_key = <ID for member you want to lookup>
ORDER BY position;
Например, результат выполнения этого запроса для списка Джона Смита (т. Е. WHERE member_id_key = 1) будет:
+--------------+
| name |
+--------------+
| Sue Someone |
| John Smith |
| John Johnson |
| John Doe |
+--------------+
Вы можете рассчитать позицию для добавления в конец списка, добавив единицу к максимальному значению позиции для данного идентификатора.