списке пользователей количество постов не соответствует действительности. причина этого - дублирование количества пользовательских постов в таблице 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;
открыть viewtopic.php
найти
- Код: Выделить всё
$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']: '';
открыть includes/functions.php
найти
- Код: Выделить всё
$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";
открыть includes/usercp_viewprofile.php
найти
- Код: Выделить всё
'POSTS' => $profiledata['user_posts'],
заменить на
- Код: Выделить всё
'POSTS' => $profiledata['real_posts'],







