списке пользователей количество постов не соответствует действительности. причина этого - дублирование количества пользовательских постов в таблице phpbb_users.user_posts, что уже само по себе не есть хорошо - нарушен принцип целостности данных
кажется на форуме упоминался некий мод, корректирующий сие явление, что есть лишь временное лекарство
предлагается достаточно сырое решение. под "сыростью" подразумевается удаление кода, ответственного за модификацию поля таблицы phpbb_users.user_posts. просто пока я его не искал. возможно некоторые запросы можно упростить - но от этого выйгрыш незначительный.
и еще. я практически не слежу за официальными обновлениями - по причине глубокой модификации форума. поэтому личная рекомендация тестерам
1. на рабочий форум не ставить, тестировать локально
2. фраза "найти" указывает на фрагменты файлов форума версии 2.0.19
3. фраза "заменить на" указывает на фрамент кода, в который случайно попал фрагмент другой модификации
возможно, что похожее предложение уже существует, возможно оно лучше - в таком случае покажите. будет интересно сравнить
и так
открыть memberlist.php
найти
Код: Выделить всё
$sql = "SELECT username, user_id, user_viewemail, user_posts, user_regdate, user_from, user_website, user_email, user_icq, user_aim, user_yim, user_msnm, user_avatar, user_avatar_type, user_allowavatar
FROM " . USERS_TABLE . "
WHERE user_id <> " . ANONYMOUS . "
ORDER BY $order_by";
Код: Выделить всё
$sql = "SELECT u.*, COUNT(p.poster_id) AS real_posts
FROM " . USERS_TABLE . " u
LEFT JOIN " . POSTS_TABLE . " p ON p.poster_id = u.user_id
WHERE user_id <> " . ANONYMOUS . "
GROUP BY u.user_id
ORDER BY $order_by";
Код: Выделить всё
$posts = ( $row['user_posts'] ) ? $row['user_posts'] : 0;
Код: Выделить всё
$posts = ( $row['real_posts'] ) ? $row['real_posts'] : 0;
найти
Код: Выделить всё
$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt
WHERE p.topic_id = $topic_id
$limit_posts_time
AND pt.post_id = p.post_id
AND u.user_id = p.poster_id
ORDER BY p.post_time $post_time_order
LIMIT $start, ".$board_config['posts_per_page'];
Код: Выделить всё
$sql = "SELECT u.*, p.*, pt.post_text, pt.post_subject, pt.bbcode_uid, COUNT( u.user_id ) real_posts
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt
LEFT JOIN " . POSTS_TABLE . " pp ON pp.poster_id = u.user_id
WHERE p.topic_id = $topic_id
$limit_posts_time
AND pt.post_id = p.post_id
AND p.poster_id = u.user_id
GROUP BY p.post_id
ORDER BY p.post_time $post_time_order
LIMIT $start, " . $board_config['posts_per_page'];
Код: Выделить всё
$poster_posts = ( $postrow[$i]['user_id'] != ANONYMOUS ) ? $lang['Posts'] . ': ' . $postrow[$i]['user_posts'] : '';
Код: Выделить всё
$poster_posts = ( $postrow[$i]['user_id'] != ANONYMOUS ) ? $lang['Posts'] . ': ' . $postrow[$i]['real_posts']: '';
найти
Код: Выделить всё
$sql = "SELECT *
FROM " . USERS_TABLE . "
WHERE ";
$sql .= ( ( is_integer($user) ) ? "user_id = $user" : "username = '" . str_replace("\'", "''", $user) . "'" ) . " AND user_id <> " . ANONYMOUS;
Код: Выделить всё
$_user = ( is_integer($user) ) ? "u.user_id = $user" : "u.username = '" . $user . "'";
$sql = "SELECT u.*, COUNT(p.poster_id) AS real_posts
FROM " . USERS_TABLE . " u
LEFT JOIN " . POSTS_TABLE . " p ON p.poster_id = u.user_id
WHERE $_user
GROUP BY u.user_id";
найти
Код: Выделить всё
'POSTS' => $profiledata['user_posts'],
Код: Выделить всё
'POSTS' => $profiledata['real_posts'],