Косяки с рейтингом

  
МедальМедаль за отзывчивостьКубок зрительских симпатий
Сообщений: 437
В файле lib_karma.php ошибка в запросе в базу, приводящая к неправильному пополнению
столбца rating в таблице com_users !!!!

Ошибочный запрос!!!


Код PHP:
    //получаем информацию о цели
    $info = $inDB->get_fields('cms_rating_targets', "target='{$target}'", '*');

    //если нужно, изменяем рейтинг автора цели
    if ($info['is_user_affect'] && $info['user_weight'] && $info['target_table']){

        $user_sql = "UPDATE cms_users u,
                            {$info['target_table']} t
                     SET u.rating = u.rating + ({$points}*{$info['user_weight']})
                     WHERE t.user_id = u.id";

        $inDB->query($user_sql);
        
    }



Правильный запрос!!!


Код PHP:
//получаем информацию о цели
    $info = $inDB->get_fields('cms_rating_targets', "target='{$target}'", '*');

    //если нужно, изменяем рейтинг автора цели
    if ($info['is_user_affect'] && $info['user_weight'] && $info['target_table']){

        $user_sql = "UPDATE cms_users u,
                            {$info['target_table']} t
                     SET u.rating = u.rating + ({$points}*{$info['user_weight']})
                     WHERE u.id = t.user_id AND t.id = '$item_id'
                     LIMIT 1";

        $inDB->query($user_sql);
        
    }
Редактировалось: 3 раз (Последний: 13 июля 2010 в 02:30)
МедальМедаль за отзывчивостьКубок зрительских симпатий
Сообщений: 437
После такого исправления вроде рейтинг стал прибавляться предсказуемо. И именно тому, кто писал пост/коммент.
МедальМедаль за отзывчивостьКубок зрительских симпатий
Сообщений: 437
Нет вру!

Вот так!

Код PHP:
        $user_sql = "UPDATE cms_users u,
                            {$info['target_table']} t
                     SET u.rating = u.rating + ({$points}*{$info['user_weight']})
                     WHERE u.id = t.user_id AND t.id = '$item_id'
                     ";
Редактировалось: 1 раз (Последний: 13 июля 2010 в 12:11)
Медаль
Сообщений: 180
Надо подождать пока Админ, что-то скажет по этому поводу, а Админа уже как 3 дня небыло на сайте
Пицца Челентано Алчевск
МедальМедаль за отзывчивостьКубок зрительских симпатий
Сообщений: 437
А ты попробуй у себя. Проверь. Тестировать все равно надо.
Медаль
Сообщений: 180
Александр:

Нет вру!

Вот так!

Код PHP:
        $user_sql = "UPDATE cms_users u,
                            {$info['target_table']} t
                     SET u.rating = u.rating + ({$points}*{$info['user_weight']})
                     WHERE u.id = t.user_id AND t.id = '$item_id'
                     ";

Ну так вроде бы как нормально работает, если что-то будет не так, то отпишусь, а пока всё внорме, спасибо. Надо бы всё-таки чтобы это исправление было внесено в сборку. Я думаю, что такой глюк был не только на этом сайте и у меня, но и у многих других тоже.
Пицца Челентано Алчевск
Сообщений: 0
А чем с добавлением
Код PHP:
LIMIT 1
хуже работает? по идее ведь одному юзеру-то рейт увеличиваем.
Зачем тогда лишний раз MySQL нагружать? Или я что-то опять не понял с этим рейтингом?! :)
Буду очень признателен за объяснения.
МедальМедаль за отзывчивостьКубок зрительских симпатий
Сообщений: 437
хуже работает?

- Вообще не работает!

Буду очень признателен за объяснения.

SELECT - Команда SQL, предназначена для выборки строки (нескольких строк) из одной таблицы,
для выполнения сложных вычислений и группировки строк сразу из нескольких таблиц.
(Одна из самых навороченных функций)

LIMIT- Это необязательный модификатор команды SELECT, позволяющий поместить в
результирующий набор данных не все строки таблицы, удовлетворяющие WHERE запросу,
а только некоторые из них.

UPDATE - Эта команда позволяет обновлять определенные поля в записи, оставляя нетронутыми
остальные.

Так вот уж получилось что LIMIT относится к другой функции.

Зачем тогда лишний раз MySQL нагружать?

Поверь, этот запрос выполнится мгновенно, и совсем не нагрузит базу. MySQL ведь не лохи создали joke
Редактировалось: 1 раз (Последний: 7 августа 2010 в 01:52)
Сообщений: 0
Тогда объясни, плз, мы одному юзеру рейт меняем или нет? ))
МедальМедаль за отзывчивостьКубок зрительских симпатий
Сообщений: 437
Конечно одному.

Код PHP:
WHERE u.id = t.user_id AND t.id = '$item_id'
этому запросу соответствует лишь один пользователь.

запрос вполне корректен. v
Сообщений: 0
Вот всё работает отменно. Только вот пропала возможность поставить рейтинг статьи. Ставишь включить, а после сохранения опять сбрасывается в положение выклчено. Как это победить?
Медаль
Сообщений: 755
Александр:
SELECT - Команда SQL, предназначена для выборки строки (нескольких строк) из одной таблицы,
для выполнения сложных вычислений и группировки строк сразу из нескольких таблиц.
(Одна из самых навороченных функций)

LIMIT- Это необязательный модификатор команды SELECT, позволяющий поместить в
результирующий набор данных не все строки таблицы, удовлетворяющие WHERE запросу,
а только некоторые из них.

UPDATE - Эта команда позволяет обновлять определенные поля в записи, оставляя нетронутыми
остальные.

Так вот уж получилось что LIMIT относится к другой функции.
Действительно, в описании функции UPDATE присутствует LIMIT:
Код PHP:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
    SET col_name1=expr1 [, col_name2=expr2, ...]
    [WHERE where_definition]
    [LIMIT #]
Но в описании сказано:
В версии MySQL 3.23 можно использовать LIMIT #, чтобы убедиться, что было изменено только заданное количество строк. А в текущей версии Limit не работает - выдаёт ошибку.
Сообщений: 0
Виктор:
Но в описании сказано:
В версии MySQL 3.23 можно использовать LIMIT #, чтобы убедиться, что было изменено только заданное количество строк. А в текущей версии Limit не работает - выдаёт ошибку.
Я кста, тоже это почитал. :)
Короче, как написал Александр, все работает и слава Богу! smile Я еще кое-что дописал.
Убрал возможность плюсить собственные статьи и так по мелочи, и вообще доволен! :)
Медаль
Сообщений: 150
Возможно (и скорее всего), проблема уже закрыта в билде нового дистрибутива, однако на всякий пожарный - на сайте Инстанта, в моем аккаунте показывается абсолютно незаслуженный Рейтинг в 5604 единиц
VPS от 7.65$ - Включен ISP Manager, 256Ram, 500Mhz CPU и 5Gb - использую уже почти два года.
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1778
С рейтингом пофиксено на этом сайте, в новый релиз включено. Спасибо Александру за разбор проблемы.

По рейтингу клубов:
пока сделал так:
рейтинг клуба = суммарному рейтингу всех его участников. изменяется он при вступлении/выходе из клуба.
Пока так, во всяком случае тормоза при вступлении/выходе из клуба больше не провляются.
Кому интересно - смотреть тут
видеохостинг на базе InstantCms
В начало страницы 
|
Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.