Миграция с phpBB2 на SMF2.0 проблема и решение (может кому пригодиться)

Автор corochoone, 12 апреля 2012, 22:52:21

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

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

corochoone

Ковертер брал тут:

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;

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