[FAQ] Конвертирование

Автор digger®, 12 апреля 2012, 23:44:31

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.


digger®

#1
Ковертер брал тут: http://download.simplemachines.org/?converters;software=phpbb

после запуска конвертера получил на этапе

Converting topics...
Wrong value type sent to the database. Integer expected. (id_member_updated)

Двухчасовые раскопки помогли найти причину проблемы.
Дело в том, что конвертер категорически не любит сообщения с удалёнными пользователями. Эти пользователи имеют в качестве идентификатора -1, а SMF хочет только положительные целые числа. В продолжение проблемы, ещё и после их запроса на конвертирование в поле id_member_updated появляются значения NULL, что тоже не нравится SMF. Решил проблему так.
Редактируем файл phpbb2_to_smf.sql в комплекте конвертера, запрос, который начинается в секции Converting topics...
Изначально он выглядит так:

SELECT
        t.topic_id AS id_topic, (t.topic_type = 1 OR t.topic_type = 2) AS is_sticky,
        t.topic_first_post_id AS id_first_msg, t.topic_last_post_id AS id_last_msg,
        t.topic_poster AS id_member_started, p.poster_id AS id_member_updated,
        t.forum_id AS id_board, IF(v.vote_id != 0, v.vote_id, 0) AS id_poll, t.topic_status = 1 AS locked,
        t.topic_replies AS num_replies, t.topic_views AS num_views
FROM {$from_prefix}topics AS t
        LEFT JOIN {$from_prefix}posts AS p ON (p.post_id = t.topic_last_post_id)
        LEFT JOIN {$from_prefix}vote_desc AS v ON (v.topic_id = t.topic_id)
/* // !!! WHERE t.topic_moved_id = 0 */
GROUP BY t.topic_id
HAVING id_first_msg != 0
        AND id_last_msg != 0;

делаем вот так:

SELECT
        t.topic_id AS id_topic, (t.topic_type = 1 OR t.topic_type = 2) AS is_sticky,
        t.topic_first_post_id AS id_first_msg, t.topic_last_post_id AS id_last_msg,
        t.topic_poster AS id_member_started, p.poster_id AS id_member_updated,
        t.forum_id AS id_board, IF(v.vote_id != 0, v.vote_id, 0) AS id_poll, t.topic_status = 1 AS locked,
        t.topic_replies AS num_replies, t.topic_views AS num_views
FROM {$from_prefix}topics AS t
        LEFT JOIN {$from_prefix}posts AS p ON (p.post_id = t.topic_last_post_id)
        LEFT JOIN {$from_prefix}vote_desc AS v ON (v.topic_id = t.topic_id)
WHERE p.poster_id IS NOT NULL AND p.poster_id<>-1
GROUP BY t.topic_id
HAVING id_first_msg != 0
        AND id_last_msg != 0;

Затем запускаем конвертилку снова. Может кому пригодиться! Успехов!

digger®

После конвертации под каждым сообщением текст «Последнее редактирование: Декабрь 31, 1969, 08:00:00 pm от Guest»
Можно ли это как-то убрать?

В phpMyAdmin выполнить запрос
UPDATE smf_messages SET modified_time = '', modified_name = ''