powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Перестановка позиций местами
11 сообщений из 11, страница 1 из 1
Перестановка позиций местами
    #36349441
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 6 тыс. записей. Нужно взять 231, 479, 877, 878, 1201 и 2745 записи и вставить их после 4741 записи. Каков наиболее выигрышный алгоритм решения подобной задачи? Интересует решение, которое будет работать на MySQL и PostgreSQL.

пример принципа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
было                стало
=======             ===========
1. мама             1. мама
2. папа  <-под      2. папа
3. брат     |       3. сестра
4. сестра  -|       4. дядя
5. собака   |       5. брат
6. тетя     |       6. собака
7. дядя    -|       7. тетя
8. дедушка          8. дедушка

Сохранение точных номеров не принципиально, потому что это чисто сортировочные ключи, а не идентификационные. Думал, что-то с помощью дат замутить, так до сих пор думаю.

Может кто подскажет, где лучше всего искать информацию про подобные задачи?
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36349476
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЕсть 6 тыс. записей. Нужно взять 231, 479, 877, 878, 1201 и 2745 записи и вставить их после 4741 записи.Что значит после?
Так меняй в одной транзакции
Код: plaintext
1.
2.
update table
set position= 4732 
where position= 231 
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36349502
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЕсть 6 тыс. записей. Нужно взять 231, 479, 877, 878, 1201 и 2745 записи и вставить их после 4741 записи. Каков наиболее выигрышный алгоритм решения подобной задачи? Интересует решение, которое будет работать на MySQL и PostgreSQL.

пример принципа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
было                стало
=======             ===========
1. мама             1. мама
2. папа  <-под      2. папа
3. брат     |       3. сестра
4. сестра  -|       4. дядя
5. собака   |       5. брат
6. тетя     |       6. собака
7. дядя    -|       7. тетя
8. дедушка          8. дедушка

Сохранение точных номеров не принципиально, потому что это чисто сортировочные ключи, а не идентификационные. Думал, что-то с помощью дат замутить, так до сих пор думаю.

Может кто подскажет, где лучше всего искать информацию про подобные задачи?пятничное такое объяснение проблемы
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36349697
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. RavenЧто значит после?

"После" означает, что, например, сестра и дядя встали после папы.
Метод, который вы предлагаете, поставит брата на место сестры, а собаку на место дяди. Это противоречит условию задачи.
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36349700
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafпятничное такое объяснение проблемы

Может так будет понятнее
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
было                         стало
==================           ===================
id   sort  name              id   sort  name           
==================           ===================
1.   1.    мама              1.   1.    мама
2.   2.    папа  <-под       2.   2.    папа
3.   3.    брат     |        4.   3.    сестра
4.   4.    сестра  -|        7.   4.    дядя
5.   5.    собака   |        3.   5.    брат
6.   6.    тетя     |        5.   6.    собака
7.   7.    дядя    -|        6.   7.    тетя
8.   8.    дедушка           8.   8.    дедушка

.
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36349761
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixМожет так будет понятнее

Оно и с первого раза понятно было... Чего придираться стали... Другое дело оптимальность решения.
А насколько часто будет выполняться такая операция?
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36349910
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaА насколько часто будет выполняться такая операция?

Даже не знаю, в чем измерить эту частоту. :) Ну, скажем, 3-4% запросов из всех запросов приложения будут именно этого характера. На каждые 10 тыс. запросов, 300-400 раз придется эту перестановку делать.
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36349958
Lumix,
Код: plaintext
1.
2.
3.
4.
5.
6.
UPDATE subj t2
SET sort = t1.sort -  1   --до, если после, то +1
FROM subj t1
WHERE 
  t1.id =  2   -- перемещаем относительно <<папа>>
  AND t2 = 4 ; -- кого перемещаем

Что-нть типа этого?
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36350144
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixДаже не знаю, в чем измерить эту частоту. :)

Как вариант в количествах штук в день и количествах людей это делающих.

Если это делается редко и ограниченным количеством людей... Предложу такой способ...
Сделать режим, который может "перенумировывать" записи БД через N. Например N=10
10 папа
20 мама
30 сестра
...
Т.о. поместить "сестру" под "папу" не составит труда. Выполняется такое быстро, но не факт что между "папой"и "мамой" всегда будет "свободное" место...

А так, обычный метод "пузырька" может помочь решить этот вопрос. Другое дело как его "обставить" в SQLях которые ты используешь...
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36350235
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПодпольщегLumix,
Код: plaintext
1.
2.
3.
4.
5.
6.
UPDATE subj t2
SET sort = t1.sort -  1   --до, если после, то +1
FROM subj t1
WHERE 
  t1.id =  2   -- перемещаем относительно <<папа>>
  AND t2 = 4 ; -- кого перемещаем

Что-нть типа этого?
Правильно ли я понял, что вы предлагаете такую стратегию?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
tansaction

   1 . create temp
   2 . insert into temp select from hot where id <= точка вставки

  loop N
        3 . insert into temp select точка вставки + N as id 
              from hot where id = объект перемещения N

   4 . insert into temp select LastInsertId +  1  as id 
              from hot where id > точка вставки и id not in (id1, id2, ..., idN)
   5 . truncate hot 
   6 . insert hot select from temp table
...
Рейтинг: 0 / 0
Перестановка позиций местами
    #36350311
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix, А можно поинтересоваться, для чего вам понадобилась такое ИМХО,
очень необычное действие? С целью чего?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Перестановка позиций местами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]