Сообщений: 437 | | #16 - 13 июля 2010 в 01:41 | |
В файле 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 | | #17 - 13 июля 2010 в 01:50 | |
После такого исправления вроде рейтинг стал прибавляться предсказуемо. И именно тому, кто писал пост/коммент. |
Сообщений: 437 | | #18 - 13 июля 2010 в 12:10 | |
Нет вру! Вот так! Код 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 | | #19 - 13 июля 2010 в 15:09 | |
Надо подождать пока Админ, что-то скажет по этому поводу, а Админа уже как 3 дня небыло на сайте |
Сообщений: 437 | | #20 - 13 июля 2010 в 15:31 | |
А ты попробуй у себя. Проверь. Тестировать все равно надо. |
Сообщений: 180 | | #21 - 14 июля 2010 в 01:23 | |
| Александр: | Нет вру! Вот так! Код 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 | | #22 - 6 августа 2010 в 17:09 | |
А чем с добавлением хуже работает? по идее ведь одному юзеру-то рейт увеличиваем. Зачем тогда лишний раз MySQL нагружать? Или я что-то опять не понял с этим рейтингом?! :) Буду очень признателен за объяснения. |
Сообщений: 437 | | #23 - 7 августа 2010 в 01:51 | |
- Вообще не работает! | Буду очень признателен за объяснения. | SELECT - Команда SQL, предназначена для выборки строки (нескольких строк) из одной таблицы, для выполнения сложных вычислений и группировки строк сразу из нескольких таблиц. (Одна из самых навороченных функций) LIMIT- Это необязательный модификатор команды SELECT, позволяющий поместить в результирующий набор данных не все строки таблицы, удовлетворяющие WHERE запросу, а только некоторые из них. UPDATE - Эта команда позволяет обновлять определенные поля в записи, оставляя нетронутыми остальные. Так вот уж получилось что LIMIT относится к другой функции. | Зачем тогда лишний раз MySQL нагружать? | Поверь, этот запрос выполнится мгновенно, и совсем не нагрузит базу. MySQL ведь не лохи создали Редактировалось: 1 раз (Последний: 7 августа 2010 в 01:52) |
Сообщений: 0 | | #24 - 7 августа 2010 в 10:22 | |
Тогда объясни, плз, мы одному юзеру рейт меняем или нет? )) |
Сообщений: 437 | | #25 - 7 августа 2010 в 19:29 | |
Конечно одному. Код PHP:WHERE u.id = t.user_id AND t.id = '$item_id' этому запросу соответствует лишь один пользователь. запрос вполне корректен. |
Сообщений: 0 | | #26 - 18 августа 2010 в 11:32 | |
Вот всё работает отменно. Только вот пропала возможность поставить рейтинг статьи. Ставишь включить, а после сохранения опять сбрасывается в положение выклчено. Как это победить? |
Сообщений: 755 | | #27 - 18 августа 2010 в 13:11 | |
| Александр: | 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 | | #28 - 20 августа 2010 в 12:59 | |
| Виктор: | Но в описании сказано: В версии MySQL 3.23 можно использовать LIMIT #, чтобы убедиться, что было изменено только заданное количество строк. А в текущей версии Limit не работает - выдаёт ошибку. |
Я кста, тоже это почитал. :) Короче, как написал Александр, все работает и слава Богу!  Я еще кое-что дописал. Убрал возможность плюсить собственные статьи и так по мелочи, и вообще доволен! :) |
Сообщений: 150 | | #29 - 22 августа 2010 в 21:00 | |
Возможно (и скорее всего), проблема уже закрыта в билде нового дистрибутива, однако на всякий пожарный - на сайте Инстанта, в моем аккаунте показывается абсолютно незаслуженный Рейтинг в 5604 единиц VPS от 7.65$ - Включен ISP Manager, 256Ram, 500Mhz CPU и 5Gb - использую уже почти два года. |
Сообщений: 1778 | | #30 - 24 сентября 2010 в 18:27 | |
С рейтингом пофиксено на этом сайте, в новый релиз включено. Спасибо Александру за разбор проблемы. По рейтингу клубов: пока сделал так: рейтинг клуба = суммарному рейтингу всех его участников. изменяется он при вступлении/выходе из клуба. Пока так, во всяком случае тормоза при вступлении/выходе из клуба больше не провляются. Кому интересно - смотреть тут |