Пропущенные строки в MySQL - Форум о заработке в интернете
Форум о заработке в интернете

Вернуться   Форум о заработке в интернете > Форум для вебмастера > Программирование

Важная информация

Программирование Скрипты, cms (Wordpress, Joomla, Drupal и др.), плагины, php, mysql.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2010, 17:15   #1
Даниэла Крис
Специалист
 
Аватар для Даниэла Крис
 
Регистрация: 20.06.2009
Адрес: в другой Галактике =)
Сообщений: 317
4 | 3
3 | 0
Автор темы
  По умолчанию

Суть вопроса: например, есть форум с БД MySQL. Каждое сообщение в базе имеет свой номер (pid). Когда сообщения удаляются, то часть строк пропускается и они идут уже не по порядку. Скажем, на форуме написали 100 000 сообщений, мы хотим поздравить пользователя, который написал то самое стотысячное сообщение, а вместо сообщения номер 100 000 нам приходится искать, например, сообщение номер 102768.
Есть ли функция, позволяющая вместо присвоения новых, бОльших цифр новым сообщениям заполнять пропущенные строки в таблице? И как тогда будет выглядеть сортировка сообщений в темах - по датам или по pid?
Даниэла Крис вне форума   Ответить с цитированием
Старый 09.08.2010, 01:17   #2
Senator2
Мастер
 
Аватар для Senator2
 
Регистрация: 06.08.2010
Адрес: Украина, Киев
Сообщений: 742
0 | 0
0 | 0
По умолчанию

Даниэла Крис, если я правильно понял суть вопроса - то скорее всего - так сделать у Вас не получится...
Попытаюсь объяснить почему ...
Причина №1.
Предположим идет обычная работа форума - т.е. сообщения добавляются в базу как положено, ежеминутно (ежесекундно, и т.д. - зависит от раскрученности форума)...
Когда Вы решились удалить из базы какие-то сообщения - Вы ведь будете удалять не с какого-то момента и до конца ? Вы ведь будете удалять какие-то сообщения выборочно, ну или за какой-то период времени (старые сообщения, например).. А новые сообщения (последние которые были добавлены) они ведь останутся, и останутся со своими ID... И дальнейшая нумерация сообщений продолжится с этого места...
И это правильно...
Причина №2
В базе сообщений это поле (уникальный код сообщения - ID) скорее всего сделано автоинкрементным - т.е. СУБД сама нумерует все добавляемые строки в базу и следит за тем, чтобы они (номера строк) были уникальными...
Можно было бы конечно сделать это поле не автоинкрементным - но тогда пришлось бы городить не простенький механизм вычисления следующего номера для вновь добавляемого сообщения и каждый раз следить чтобы этот номер больше никогда не повторился...
Это дало бы неслабую нагрузку на базу при добавлении каждого сообщения...

Для решения Вашей задачи Вам нужно сделать запрос к базе сообщений, который выберет 100000-ое сообщение... Не сообщение с ID = 100000, а именно 100000-ое сообщение из базы, отсортированной по дате сообщений.
Senator2 вне форума   Ответить с цитированием
Старый 09.08.2010, 01:26   #3
Даниэла Крис
Специалист
 
Аватар для Даниэла Крис
 
Регистрация: 20.06.2009
Адрес: в другой Галактике =)
Сообщений: 317
4 | 3
3 | 0
Автор темы
  По умолчанию

Цитата:
Для решения Вашей задачи Вам нужно сделать запрос к базе сообщений, который выберет 100000-ое сообщение... Не сообщение с ID = 100000, а именно 100000-ое сообщение из базы, отсортированной по дате сообщений.
А вот с этим как раз проблема. Не знаю почему, но в форумах IPB часто почему-то сортировка сбивается. Изначально посты сортируются по id, но в какой-то момент неизвестно почему начинают новые посты с большими id записываться в середину таблицы, а то и вовсе в начало. Причину этого глюка на форуме техподдержки установить не удалось - сказали, что раз не мешает работе форума, то и выяснять причину нет смысла.
Даниэла Крис вне форума   Ответить с цитированием
Старый 09.08.2010, 01:48   #4
Senator2
Мастер
 
Аватар для Senator2
 
Регистрация: 06.08.2010
Адрес: Украина, Киев
Сообщений: 742
0 | 0
0 | 0
По умолчанию

Даниэла Крис, Так я думал что Вам просто в какой-то момент времени нужно определить счастливого обладателя 100000-го сообщения, и всё ???
Если это так - то в Администраторе просто пишите такой запрос (там вроде есть пункт для работы с базой напрямую) - а уже в самом запросе указываете конкретно сортировку по времени сообщения - по идее должно быть нормально...

Добавлено через 16 минут
Цитата:
Сообщение от Даниэла Крис, post: 93925
А вот с этим как раз проблема. Не знаю почему, но в форумах IPB часто почему-то сортировка сбивается. Изначально посты сортируются по id, но в какой-то момент неизвестно почему начинают новые посты с большими id записываться в середину таблицы, а то и вовсе в начало. Причину этого глюка на форуме техподдержки установить не удалось - сказали, что раз не мешает работе форума, то и выяснять причину нет смысла.
В общем смотрите...
Если Вам в IPB форуме нужно в какой-то момент времени найти сообщение № 10 000 (именно 10 000-ое сообщение, а не сообщение с pid=10000) то Вам нужно выполнить следующий запрос к базе ibf_posts :
Можно делать в Администраторе MySQL, а можно в Администрировании форума...
PHP код:
SELECT FROM ibf_posts ORDER by post_date LIMIT 9999,
Этот запрос выдаст Вам всего 1 запись...
И это будет именно 10 000 запись...
База при этом будет отсортирована именно по дате создания сообщений...

Если не найдете где в Администрировании форума писать такой запрос - пишите...
Senator2 вне форума   Ответить с цитированием
Старый 09.08.2010, 01:59   #5
Даниэла Крис
Специалист
 
Аватар для Даниэла Крис
 
Регистрация: 20.06.2009
Адрес: в другой Галактике =)
Сообщений: 317
4 | 3
3 | 0
Автор темы
  По умолчанию

Ну счастливого обладателя я нахожу и так, зная разницу между фактическим и записанным числом сообщений. И где что искать в админке ИПБ, я знаю, в том числе и знаю как составлять запросы (и не только чтоб искать, а и чтобы заполнять пропущенные строки - иногда от нечего делать я и таким маюсь). Мне интересно просто можно ли без этого обойтись. Раз нельзя - что ж, жалко. =(
Даниэла Крис вне форума   Ответить с цитированием
Старый 23.02.2019, 14:42   #6
kosmonitor
Новичок
 
Регистрация: 21.08.2016
Сообщений: 11
0 | 0
0 | 0
По умолчанию Re: Пропущенные строки в MySQL

думаю есть.но найти сложно
kosmonitor вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc.