Как составить sql-запрос?

Говорим обо всем, что не имеет отношения к основной тематике сайта и форума. Установлена авточистка (400 дней).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Pazh
Former team member
Сообщения: 2053
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 35 раз
Поблагодарили: 407 раз
Контактная информация:

Re: Как составить sql-запрос?

Сообщение Pazh » 09.02.2019 11:39

Dbonz, опишите подробнее для чего нужно переместить строки? Не для сортировки ли? Может эту задачу можно решить по другому. К сожалению самое глупое решение может быть самым простым и оптимальным если заранее известны id
форум ЖК Пироговская ривьера Помощь в ЛС/email только за WM или ЯД

Аватара пользователя
Dbonz
phpBB 2.0.0
Сообщения: 225
Зарегистрирован: 08.07.2012 14:04
Благодарил (а): 25 раз
Поблагодарили: 25 раз

Re: Как составить sql-запрос?

Сообщение Dbonz » 09.02.2019 13:24

Pazh, С выбранной позиции переместить все посты из одной темы в конец другой, чтобы не было "мешанки".

Посты ранжируются по id.

Если переносить посты из старой темы с низким значением id в новую тему с высоким значением id, то они лягут выше первого поста топика или вообще вперемешку в зависимости от значения id.

Было желание осуществлять перенос сообщений без нарушения первичной структуры лога в теме принимающей посты.
Сделать-то сделал. Однако если оставлять в таком виде с запросом, дублирующим сообщения, то наверно придётся делить на "пакеты" это копирование на случай если будет переноситься несколько десятков/сотен страниц сообщений.

Поэтому ищу менее костыльное решение.

Аватара пользователя
Pazh
Former team member
Сообщения: 2053
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 35 раз
Поблагодарили: 407 раз
Контактная информация:

Re: Как составить sql-запрос?

Сообщение Pazh » 09.02.2019 14:44

Dbonz, тогда вы абсолютно не в ту сторону копание. Сортировка сообщений по умолчанию идёт не по id, а по времени создания - вам нужно взять время последнего поста в теме и добавить переносимым постам по 1 миллисекунды
форум ЖК Пироговская ривьера Помощь в ЛС/email только за WM или ЯД

Аватара пользователя
Dbonz
phpBB 2.0.0
Сообщения: 225
Зарегистрирован: 08.07.2012 14:04
Благодарил (а): 25 раз
Поблагодарили: 25 раз

Re: Как составить sql-запрос?

Сообщение Dbonz » 09.02.2019 14:56

Pazh, именно с этого я и начал. :D
Но потом решил, что портить достоверность времени публикации сообщений неправильно. Плюс при переносе пачками присваивается одинаковое время без разницы в миллисекунду.
Дополнительно перебирать в цикле поле post_time для добавления миллисекунды кажется ещё более костыльным.

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11033
Зарегистрирован: 18.02.2007 19:01
Откуда: Рига, Латвия (страна-недоразумение)
Благодарил (а): 43 раза
Поблагодарили: 2400 раз
Контактная информация:

Re: Как составить sql-запрос?

Сообщение Sheer » 09.02.2019 14:57

Ага, только вот
Sheer писал(а):
02.10.2016 2:14
Вот только есть одна пичалька. Синхронизация темы или форума вернет все на старое место. Ну сообщение останется первым, а вотtopic_first_post_id примет первоначальное значение. Так синхронизация работает. Она определяет первое сообщение не по времени создания сообщения, а по его id
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Pazh
Former team member
Сообщения: 2053
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 35 раз
Поблагодарили: 407 раз
Контактная информация:

Re: Как составить sql-запрос?

Сообщение Pazh » 09.02.2019 14:59

Dbonz, внизу каждой темы есть поля сортировки сообщений в теме - изменением id вы ничего не добьётесь без удаления этой сортировки, а сортировать по id там нет возможности
форум ЖК Пироговская ривьера Помощь в ЛС/email только за WM или ЯД

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11033
Зарегистрирован: 18.02.2007 19:01
Откуда: Рига, Латвия (страна-недоразумение)
Благодарил (а): 43 раза
Поблагодарили: 2400 раз
Контактная информация:

Re: Как составить sql-запрос?

Сообщение Sheer » 09.02.2019 15:04

Dbonz, бросьте вы эту затею, перетасовав id сообщений вы такую кашу сделаете в БД, что потом черт ногу сломит.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Dbonz
phpBB 2.0.0
Сообщения: 225
Зарегистрирован: 08.07.2012 14:04
Благодарил (а): 25 раз
Поблагодарили: 25 раз

Re: Как составить sql-запрос?

Сообщение Dbonz » 09.02.2019 15:06

Pazh, Сортировка по времени отвязана, как ненадёжная и нецелесообразная.
На форуме же может быть несколько сообщений с одинаковым временем публикации с точностью до миллисекунды. И как вы будете ранжировать если эти сообщения при переносе попадут в одну тему?
Последний раз редактировалось Dbonz 09.02.2019 15:27, всего редактировалось 1 раз.

Аватара пользователя
Pazh
Former team member
Сообщения: 2053
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 35 раз
Поблагодарили: 407 раз
Контактная информация:

Re: Как составить sql-запрос?

Сообщение Pazh » 09.02.2019 15:08

Dbonz, не будет, микроблокировка все равно срабатывает. Иначе ты автоинкремент не работал
форум ЖК Пироговская ривьера Помощь в ЛС/email только за WM или ЯД

Аватара пользователя
Dbonz
phpBB 2.0.0
Сообщения: 225
Зарегистрирован: 08.07.2012 14:04
Благодарил (а): 25 раз
Поблагодарили: 25 раз

Re: Как составить sql-запрос?

Сообщение Dbonz » 09.02.2019 15:24

Pazh писал(а):
09.02.2019 15:08
не будет, микроблокировка все равно срабатывает. Иначе ты автоинкремент не работал
O RLY?
Вы не видели строк с одинаковым значением времени? А они вполне могут быть.
Я спорить не буду.
Есть задача – время постов не трогать. ;)

Аватара пользователя
Pazh
Former team member
Сообщения: 2053
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 35 раз
Поблагодарили: 407 раз
Контактная информация:

Re: Как составить sql-запрос?

Сообщение Pazh » 09.02.2019 15:29

Dbonz, не уверен что при update max(id)+1 изменится значение autoincrement и вы не получите ошибку sql при очередном insert в таблицу постов
форум ЖК Пироговская ривьера Помощь в ЛС/email только за WM или ЯД

Аватара пользователя
Dbonz
phpBB 2.0.0
Сообщения: 225
Зарегистрирован: 08.07.2012 14:04
Благодарил (а): 25 раз
Поблагодарили: 25 раз

Re: Как составить sql-запрос?

Сообщение Dbonz » 09.02.2019 15:37

Pazh, об этом и говорю, что надо блокировать таблицу чтобы случайно не присвоить +1 дублируя id параллельно добавляемой записи. Это вызовет ошибку. Автоинкремент берётся от последнего максимального значения, так что в плане присвоения значения строке по полю id проблем нет. Это вполне законно и практикуется.

Аватара пользователя
LavIgor
Поддержка
Поддержка
Сообщения: 3490
Зарегистрирован: 28.04.2014 8:16
Благодарил (а): 36 раз
Поблагодарили: 906 раз

Re: Как составить sql-запрос?

Сообщение LavIgor » 09.02.2019 18:46

Dbonz, а что мешает сначала нарастить счётчик автоинкремента на нужное число записей, а потом уже начать свои манипуляции со сменой ID?

Отправлено спустя 2 минуты 23 секунды:
Dbonz писал(а):
09.02.2019 15:37
Автоинкремент берётся от последнего максимального значения
Это не всегда так, в разных СУБД его реализация различна.

Аватара пользователя
Dbonz
phpBB 2.0.0
Сообщения: 225
Зарегистрирован: 08.07.2012 14:04
Благодарил (а): 25 раз
Поблагодарили: 25 раз

Re: Как составить sql-запрос?

Сообщение Dbonz » 09.02.2019 19:09

LavIgor, а это идея. Действительно всё гениальное просто.
Спасибо! Возьму на вооружение.

Ответить

Вернуться в «Флейм»