2016-08-25 6 views
0

Я ищу решение добавить сообщение между двумя сообщениями и сохранить новый заказ в базе данных.Обновление заказа сообщений с помощью SQL-запроса

Я добавил поддержку заказа для обычных сообщений, и я планирую использовать это поле для заказа сообщений на странице. Новые сообщения создаются с той же страницы через AJAX. Все сообщения имеют один и тот же родитель.

Так у меня есть:

  1. Posta
  2. PostB
  3. PostC

Теперь я хотел бы создать новый пост (PostD) между Posta и PostB. Таким образом, новый порядок будет

  1. Posta
  2. PostD
  3. PostB
  4. PostC

Так порядковый номер должен быть обновлен для сообщений B и C и PostD присваивается номер заказа 2 при сохранении нового PostD.

Мне интересно, что было бы лучшим решением для этого. Может быть, я мог бы выполнить SQL-запрос, который бы сделал что-то вроде этого:

получить все посты с post parent XX и с номером заказа> = новый номер сообщения и добавить +1 к этим номерам заказов.

Любая помощь будет высоко оценена, спасибо!

+0

См сделки. Шаг 1. Обновите ссылку на упорядочение каждой строки с помощью ссылки на порядок> = 2. Шаг 2. Вставьте новую строку. Я предполагаю, что столбец Post является вашим основным ключом. – Strawberry

+0

Спасибо! Я попробую это. –

+0

Просто добавьте столбец времени? (Тогда порядок неважен.) – jarlh

ответ

-1

всегда используют стадии 10, так что у вас есть комната для 9 дополнительных должностей Inbetween ..

+1

Как насчет 10-го сообщения? – Strawberry

+0

Эй, почему -1? Это решение вопроса. Я согласен с тем, что это не самый изящный способ, но он выполняет свою работу. – verhie

+0

Простите, но это не совсем то, что я спросил ... Спасибо в любом случае! –

0

Используйте шаги 10000.

Алгоритм:

  • Если новый пост после того, как последний - порядка номер набор для последнего номер + 10000
  • Else получить среднее арифметическое номер для заказа между до и после Должности
  • Если нет свободных номеров между сообщениями - запустите полную перенумерацию сообщений. После этого вставьте новую строку.

Перенумерация запрос:

update posts 
    set number=(select @i:[email protected]+10000) 
where (select @i:=1)=1 and (condition_for_select_posts_branch) 
order by number