Восстановить даты регистрации пользователей

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Аватара пользователя
ScorpAL
phpBB 1.2.1
Сообщения: 20
Стаж: 18 лет 5 месяцев

Восстановить даты регистрации пользователей

Сообщение ScorpAL »

День добрый.

Был запущенный (в плане апдейтов и всякого мусора) форум в связке с Нюком.
Было решено отделить форум от Нюка, и полностью восстановить его работоспособность. Заодно обновить до версии 2.0.22

Собственно поплясав с бубном это удалось.

Внимательно изучив оставшиеся проблемы было установлено:

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

В таблице phpbb_users в поле user_regdate часть пользователей сидит со значением 0 что соотвествует 01.01.1970 в списке пользователей.

Задача:
восстановить дату регистрации пользователя по дате самого раннего опубликованного им сообщения.

Таблица phpbb_posts содержит поля poster_id и post_time.

Алгоритм представляю пока следующий:

Если в таблице phpbb_users пользователь user_id имеет user_regdate равное 0, то
показать таблицу phpbb_posts где poster_id = user_id отсортированное по полю post_time по DESC (от меньшего к большему).

Взять наименьшее значение поля post_time из таблицы phpbb_posts и вставить в таблицу phpbb_users в поле user_regdate.

Вот только беда...
С MySQL не особо дружу.

Может подскажете готовый скрипт?
Или может попробуем вместе его написать?

Заранее благодарен за любую помощь.
По итогам будет опубликованно summary.

Добавлено спустя 13 минут 47 секунд:

Поковырявшись получился первый шаг:

Код: Выделить всё

SELECT post_time
FROM `phpbb_posts`
WHERE poster_id = '2'
ORDER BY `post_time` ASC
LIMIT 1
т.е. получилось взять дату первого поста для пользователя с ID = 2.

Добавлено спустя 15 минут 3 секунды:

Код: Выделить всё

UPDATE phpbb_users SET phpbb_users.user_regdate = phpbb_posts.post_time WHERE phpbb_users.user_id = phpbb_posts.poster_id;
Ругается :(
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 18 лет 11 месяцев
Откуда: Питер
Благодарил (а): 1 раз
Поблагодарили: 27 раз

Сообщение Палыч »

где-то так... для тысячи юзеров:?

Код: Выделить всё

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

for($i = 2; $i < '1000'; $i++)
{
$sql = "SELECT post_time FROM `phpbb_posts` WHERE poster_id = $i ORDER BY `post_time` ASC LIMIT 1"
if ( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not obtain information', '', __LINE__, __FILE__, $sql);
}
$sql = "UPDATE phpbb_users SET user_regdate = $result";
}
?>
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
ScorpAL
phpBB 1.2.1
Сообщения: 20
Стаж: 18 лет 5 месяцев

Сообщение ScorpAL »

Восстановить удалось.
данным скриптом я восстанавливал даты регистрации пользователей, у которых дата регистрации стояла "0" и постов больше чем 1.
Новая дата регистрации равна дате первого поста на форуме.

Кому нужно - тот сможет уменьшить код.

Код: Выделить всё

<?php
    //*****  repair reg dates ****//

	define('IN_PHPBB', true);
	$phpbb_root_path = './';
	include($phpbb_root_path . 'extension.inc');
	include($phpbb_root_path . 'common.'.$phpEx);
	include($phpbb_root_path . 'includes/functions_search.'.$phpEx);

	// Start session management
	$userdata = session_pagestart($user_ip, PAGE_SEARCH);
	init_userprefs($userdata);
	// End session management

	$sql = "SELECT user_id, username, user_regdate, user_posts, user_regdate_new
			FROM " . USERS_TABLE ."
			WHERE user_regdate = 0 AND user_posts !=0
			ORDER BY user_id
			";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain user list', '', __LINE__, __FILE__, $sql);
	}

    $liste ='';
    while ( $row = $db->sql_fetchrow($result) )
    {
       $username = $row['username'];
       $user_id = $row['user_id'];
       $user_regdate = $row['user_regdate'];
	   $user_posts =  $row['user_posts'];
	   $user_regdate_new =  $row['user_regdate_new'];
	   
	   $sql1 = "SELECT MIN(post_time)
              FROM " . POSTS_TABLE ."  
              WHERE poster_id = $user_id
                ";

		if ($result1 = $db->sql_query($sql1))
		{
			$row1 = $db->sql_fetchrow($result1);
			$post_time = $row1[0];
		}
		
		$sql3 = "UPDATE " . USERS_TABLE . "
				SET user_regdate = $post_time
				WHERE user_id = $user_id";
			if ( !($result3 = $db->sql_query($sql3)) )
			{
				message_die(GENERAL_ERROR, 'Could not update users table', '', __LINE__, __FILE__, $sql);
			}

       $liste .= ( ( $liste != '' ) ? '<br> ' : '' ) . $username.' - <b>'.$user_id.'</b> - '. $user_regdate.' - <b>'.$user_posts.'</b> '. $post_time . ' - <font color=red>' . $user_regdate_new . '</font>';
	   
	   $i = $i+1;
    }

    message_die(GENERAL_MESSAGE,'Users:'. $i.'<br>'.$liste);

?> 

Вернуться в «Поддержка phpBB 2.0.x»