Опубликовано: 23 августа 20187 г Здравствуйте. Вот этот файл отвечает за обновление статистики на моем игровом сервере. Мне нужно сделать его в виде таска на IPS.BaseW3mmdStats.php
Опубликовано: 24 августа 20187 г Если файл обновления статистики доступен публично, то просто делайте к нему запрос.
Опубликовано: 24 августа 20187 г Автор You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN stats_games g ON g.id = gameid WHERE w3p.category=:c' at line 1 foreach($db::i('stats')->select('g.*', ['stats_w3mmdplayers', 'w3p'], array('INNER JOIN stats_games g ON g.id = gameid WHERE w3p.category=:category AND w3p.gameid NOT IN ( SELECT gameid FROM stats_games_scored) AND g.gamename NOT LIKE %dota% GROUP BY w3p.gameid ORDER BY w3p.gameid LIMIT 10'), null, \IPS\Settings::i()->score_calculate_dota_max_games) as $unscored) { $scoredGames[] = $unscored['gameid']; чего не таке?
Опубликовано: 24 августа 20187 г Автор Не получается и всё. Пожалуйста, сделайте мне вот такой запрос. SELECT g.* FROM stats_w3mmdplayers w3p INNER JOIN stats_games g ON g.id = gameid WHERE w3p.category=:category AND w3p.gameid NOT IN ( SELECT gameid FROM stats_games_scored) AND g.gamename NOT LIKE '%dota%' GROUP BY w3p.gameid ORDER BY w3p.gameid LIMIT 10 тут $gamesQ = \IPS\DB::i('stats')->select('g.*', ['stats_w3mmdplayers', 'w3p'], array('w3p.category=category'), null, 5); $gamesQ->join(['stats_games','g'], ['g.id = gameid'], 'INNER');
Опубликовано: 24 августа 20187 г Автор Я разобрался, вроде работает без этого AND g.gamename NOT LIKE '%dota%' как мне правильно вставить NOT LIKE сюда? $gamesQ = \IPS\DB::i('stats')->select('g.*', ['stats_w3mmdplayers', 'w3p'], array('w3p.category=category AND w3p.gameid NOT IN ( SELECT gameid FROM stats_games_scored) AND g.gamename NOT LIKE '%dota%' GROUP BY w3p.gameid ORDER BY w3p.gameid'), null, 10); $gamesQ->join(['stats_games','g'], ['g.id = gameid'], 'INNER');
Опубликовано: 25 августа 20187 г Автор Так. Сутки вожусь, с выше указанными вопросами я справился, сейчас вот застрял и не могу понять в чем проблема, часа 4 копаю одно и тоже. Сразу вопрос, как выводить дебаг? Вот в этом коде идет сохранение данных, выше в функциях мы собирали игры и игроков, сейчас нужно заполнить тамблицу со статистикой. /** * Scores one player * @param $player * @param $game */ protected function scorePlayer($player, $game) { try { $stats = \IPS\sharedstats\Records\ScoredPlayerW3mmd::load($player['id']); } catch(\OutOfRangeException $e) { $stats = new \IPS\sharedstats\Records\ScoredPlayerW3mmd; $stats->name = $player['name']; $stats->server = $player['spoofedrealm']; } $stats->xp = 10; $stats->commends = '123'; $stats->save(); } Ошибка тут следующая: Column 'name' cannot be null Понятно, что вот это передает пустой результат: $stats->name = $player['name']; Почему?BaseW3mmdStats.php Изменено 25 августа 20187 г пользователем TemKa_SD
Опубликовано: 25 августа 20187 г Автор Карочи заработало, только цикл бесконечный, вместо 10 записей записался миллион, щас буду копать.
Опубликовано: 25 августа 20187 г Автор Всё норм ))) Работаем дальше... Посмотрите по коду, пойдет? Изменено 25 августа 20187 г пользователем TemKa_SD
Опубликовано: 10 сентября 20187 г Не очень люблю подзапросы типа NOT IN ( SELECT ... ) По мере возможности старался использовать JOIN $db->select( 'g.* ', ['stats_w3mmdplayers', 'w3p'], ['gs.gameid IS NULL AND w3p.category=? AND g.gamename NOT LIKE "%dota%"', $category], null, 10, 'w3p.gameid' ) ->join( ['stats_games' 'g'], 'g.id=w3p.gameid', 'INNER' ) ->join( ['stats_games_scored', 'gs'], 'gs.gameid=w3p.gameid', 'LEFT' )
Опубликовано: 11 сентября 20187 г По мере возможности старался использовать JOINТипы нужно писать в верхнем регистре. Это прихоть IPS
Здравствуйте. Вот этот файл отвечает за обновление статистики на моем игровом сервере. Мне нужно сделать его в виде таска на IPS.
BaseW3mmdStats.php