неактуально При удалении сообщений

deemon

Пользователь
Модификации какие-то ставили в отношении личных сообщений? Спрошу прямо - личные сообщения пользователей читаете? Потому что на последней ревизии не подтверждаю.
Нет не читаю, модификаций не каких не ставил.


Да , есть такой пользователь с ID 57342 , сразу не врубился :)

UPDATE bb_users SET user_new_privmsg = user_new_privmsg - 1 WHERE user_id IN (57342)
Ошибка говорит ровно следующее. Поле user_new_privmsg для пользователя 57342 не может быть уменьшено на один, потому как тогда оно не будет соответствовать типу BIGINT UNSIGNED (то есть >0)
Это означает, что поле user_new_privmsg для этого пользователя и так 0 уже меньше некуда
0053976a8ab0f34a2f05c7b7511edb9c.png


Так вот как исправить эту проблемму потому как пользователей таким значением не один, не два...
 

Exile

Администратор
Каким образом рассылались личные сообщения? Встроенная в движок модификация "позвать сидеров" корректно отрабатывает внесение личных сообщений в базу, прибавляя единичку в "нужном" месте:

Please Login or Register to view hidden text.

- вот тут можно посмотреть. Если используете какие-то сторонние модификации по массовой рассылке личных сообщений, то скорее всего именно там и не происходит корректного внесения личных сообщений в базу. В таком случае советовал бы эту модификацию переписать под встроенную стандартную функцию send_pm (

Please Login or Register to view hidden text.

), где обработка такого рода исключений также имеется.
 

deemon

Пользователь
Exile,
Я не ставил не каких модификаций связаных с личными сообщениями.
Подскажите как решить даную проблемму с сообщениями которые не удаляются из личных ящиков пользователей из папки Исходящие ?

Как я могу обновить счетчики сообщений, что бы исчезла эта ошибка ?
 

Exile

Администратор
Как я могу обновить счетчики сообщений, что бы исчезла эта ошибка ?


Please Login or Register to view hidden text.

- движок должен делать это автоматически. Если он это не делает - у вас еще и другие значения в таблицах на нули были чем-то затерты. Тогда надо закомментировать условия в коде или просто вот этот кусок кода вставить где-нибудь в page_header.php чтобы он для всех отрабатывал некоторое время, пока у всех "проблемных" пользователей не обновятся счетчики:
PHP:
                        $row = DB()->fetch_row("
                                SELECT COUNT(*) AS pm_count
                                FROM ". BB_PRIVMSGS ."
                                WHERE privmsgs_to_userid = ". $userdata['user_id'] ."
                                        AND privmsgs_type = ". PRIVMSGS_UNREAD_MAIL ."
                                GROUP BY privmsgs_to_userid
                        ");
 
                        $real_unread_pm_count = (int) $row['pm_count'];
 
                        if ($userdata['user_unread_privmsg'] != $real_unread_pm_count)
                        {
                                $userdata['user_unread_privmsg'] = $real_unread_pm_count;
 
                                db_update_userdata($userdata, array(
                                        'user_unread_privmsg' => $real_unread_pm_count,
                                ));
                        }
Ну или запросы вручную составить и всем обновить.
 

deemon

Пользователь

Please Login or Register to view hidden text.

- движок должен делать это автоматически. Если он это не делает - у вас еще и другие значения в таблицах на нули были чем-то затерты. Тогда надо закомментировать условия в коде или просто вот этот кусок кода вставить где-нибудь в page_header.php чтобы он для всех отрабатывал некоторое время, пока у всех "проблемных" пользователей не обновятся счетчики:
PHP:
                        $row = DB()->fetch_row("
                                SELECT COUNT(*) AS pm_count
                                FROM ". BB_PRIVMSGS ."
                                WHERE privmsgs_to_userid = ". $userdata['user_id'] ."
                                        AND privmsgs_type = ". PRIVMSGS_UNREAD_MAIL ."
                                GROUP BY privmsgs_to_userid
                        ");
 
                        $real_unread_pm_count = (int) $row['pm_count'];
 
                        if ($userdata['user_unread_privmsg'] != $real_unread_pm_count)
                        {
                                $userdata['user_unread_privmsg'] = $real_unread_pm_count;
 
                                db_update_userdata($userdata, array(
                                        'user_unread_privmsg' => $real_unread_pm_count,
                                ));
                        }
Ну или запросы вручную составить и всем обновить.
Вставил этот кусок кода , но проблемма осталась таже ошибка что я писал выше или нужно подаждать некоторое время ?
 

Exile

Администратор
Вставил этот кусок кода , но проблемма осталась таже ошибка что я писал выше или нужно подаждать некоторое время ?

Ну вообще, в коде понятно что он делает? Да, нужно некоторое время чтобы у проблемного пользователя счетчики обновились.
 
Сверху