Удаление дублей после обновления Xenforo до 2.x

baltun

Администратор
Сообщения
10.731
Реакции
2.542
Баллы
2.003
Если вы не можете войти в панель администрирования форума например в Xenforo 1.5 можно отключить все плагины запросом:
SQL:
update xf_addon set active = 0 where active = 1;
Если вы обновились и обнаружили разный мусор от BB-кодов в сообщениях почистить их можно так:
SQL:
update xf_user_profile set signature = replace(signature, '[visitor][/visitor]', '');
update xf_post set message = replace(message, '[DEMO]', '');
update xf_post set message = replace(message, '[/DEMO]', '');
Первый запрос чистить BB-коды в профиле если они находятся вместе, второй и третий запрос просто находит фрагменты в сообщениях и удаляет их.
Найти дублика тем на форуме можно по запросу:
SQL:
SELECT title, COUNT('title') AS count FROM xf_thread GROUP BY title HAVING count > 1;
Чтобы корректно удалить их требуется перейти по ссылки http://ваш_домен/admin.php?threads/batch-update сюда вы вписываете название дублирующих тем которые находите по запросу выше и тот же запрос пишет количество тем которые задублированы. Если вы хотите посмотреть все дублирующие темы, тогда можно выполнить запрос:
SQL:
SELECT * FROM
    xf_thread
WHERE
    title IN (SELECT title FROM xf_thread GROUP BY title HAVING COUNT(*) > 1)
ORDER BY
    title;
Если по каким то причинам вы не можете войти на форум или забыли пароль администратора тогда можете его сбросить запросом:
SQL:
UPDATE xf_user_authenticate
SET data = BINARY
    CONCAT(
        CONCAT(
            CONCAT('a:3:{s:4:"hash";s:40:"', SHA1(CONCAT(SHA1('new-password'), SHA1('salt')))),
            CONCAT('";s:4:"salt";s:40:"', SHA1('salt'))
        ),
        '";s:8:"hashFunc";s:4:"sha1";}'
    ),
scheme_class = 'XenForo_Authentication_Core'
WHERE user_id = 1;
Итак если вы хотите через базу удалить дубли тем запрос будет выглядеть так:
SQL:
DELETE t1 FROM xf_thread t1
INNER JOIN (
  SELECT title, MIN(thread_id) AS min_id
  FROM xf_thread
  WHERE title IN (
    SELECT title
    FROM xf_thread
    GROUP BY title
    HAVING COUNT(title) > 1
  )
  GROUP BY title
) t2 ON t1.title = t2.title AND t1.thread_id > t2.min_id;
После запроса рекомендуется выполнить перестроение всех кэшей форума.
 
Последнее редактирование:
Назад
Верх Низ