|
|
Программирование Скрипты, 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 |
Мастер
Регистрация: 06.08.2010
Адрес: Украина, Киев
Сообщений: 742
0 |
0
0 | 0 |
Даниэла Крис, если я правильно понял суть вопроса - то скорее всего - так сделать у Вас не получится...
Попытаюсь объяснить почему ... Причина №1. Предположим идет обычная работа форума - т.е. сообщения добавляются в базу как положено, ежеминутно (ежесекундно, и т.д. - зависит от раскрученности форума)... Когда Вы решились удалить из базы какие-то сообщения - Вы ведь будете удалять не с какого-то момента и до конца ? Вы ведь будете удалять какие-то сообщения выборочно, ну или за какой-то период времени (старые сообщения, например).. А новые сообщения (последние которые были добавлены) они ведь останутся, и останутся со своими ID... И дальнейшая нумерация сообщений продолжится с этого места... И это правильно... Причина №2 В базе сообщений это поле (уникальный код сообщения - ID) скорее всего сделано автоинкрементным - т.е. СУБД сама нумерует все добавляемые строки в базу и следит за тем, чтобы они (номера строк) были уникальными... Можно было бы конечно сделать это поле не автоинкрементным - но тогда пришлось бы городить не простенький механизм вычисления следующего номера для вновь добавляемого сообщения и каждый раз следить чтобы этот номер больше никогда не повторился... Это дало бы неслабую нагрузку на базу при добавлении каждого сообщения... Для решения Вашей задачи Вам нужно сделать запрос к базе сообщений, который выберет 100000-ое сообщение... Не сообщение с ID = 100000, а именно 100000-ое сообщение из базы, отсортированной по дате сообщений. |
09.08.2010, 01:26 | #3 | |
Специалист
Регистрация: 20.06.2009
Адрес: в другой Галактике =)
Сообщений: 317
4 |
3
3 | 0 |
Автор темы
Цитата:
|
|
09.08.2010, 01:48 | #4 | |
Мастер
Регистрация: 06.08.2010
Адрес: Украина, Киев
Сообщений: 742
0 |
0
0 | 0 |
Даниэла Крис, Так я думал что Вам просто в какой-то момент времени нужно определить счастливого обладателя 100000-го сообщения, и всё ???
Если это так - то в Администраторе просто пишите такой запрос (там вроде есть пункт для работы с базой напрямую) - а уже в самом запросе указываете конкретно сортировку по времени сообщения - по идее должно быть нормально... Добавлено через 16 минут Цитата:
Если Вам в IPB форуме нужно в какой-то момент времени найти сообщение № 10 000 (именно 10 000-ое сообщение, а не сообщение с pid=10000) то Вам нужно выполнить следующий запрос к базе ibf_posts : Можно делать в Администраторе MySQL, а можно в Администрировании форума... PHP код:
И это будет именно 10 000 запись... База при этом будет отсортирована именно по дате создания сообщений... Если не найдете где в Администрировании форума писать такой запрос - пишите... |
|
09.08.2010, 01:59 | #5 |
Специалист
Регистрация: 20.06.2009
Адрес: в другой Галактике =)
Сообщений: 317
4 |
3
3 | 0 |
Автор темы
Ну счастливого обладателя я нахожу и так, зная разницу между фактическим и записанным числом сообщений. И где что искать в админке ИПБ, я знаю, в том числе и знаю как составлять запросы (и не только чтоб искать, а и чтобы заполнять пропущенные строки - иногда от нечего делать я и таким маюсь). Мне интересно просто можно ли без этого обойтись. Раз нельзя - что ж, жалко. =(
|