TemKa_SD Posted August 23, 2018 Share Posted August 23, 2018 Здравствуйте. Вот этот файл отвечает за обновление статистики на моем игровом сервере. Мне нужно сделать его в виде таска на IPS.BaseW3mmdStats.php Link to comment Share on other sites More sharing options...
newbie Posted August 24, 2018 Share Posted August 24, 2018 Если файл обновления статистики доступен публично, то просто делайте к нему запрос. Link to comment Share on other sites More sharing options...
TemKa_SD Posted August 24, 2018 Author Share Posted August 24, 2018 Не понял Link to comment Share on other sites More sharing options...
TemKa_SD Posted August 24, 2018 Author Share Posted August 24, 2018 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']; чего не таке? Link to comment Share on other sites More sharing options...
TemKa_SD Posted August 24, 2018 Author Share Posted August 24, 2018 Не получается и всё. Пожалуйста, сделайте мне вот такой запрос. 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'); Link to comment Share on other sites More sharing options...
TemKa_SD Posted August 24, 2018 Author Share Posted August 24, 2018 Я разобрался, вроде работает без этого 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'); Link to comment Share on other sites More sharing options...
TemKa_SD Posted August 25, 2018 Author Share Posted August 25, 2018 (edited) Так. Сутки вожусь, с выше указанными вопросами я справился, сейчас вот застрял и не могу понять в чем проблема, часа 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 Edited August 25, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
TemKa_SD Posted August 25, 2018 Author Share Posted August 25, 2018 Карочи заработало, только цикл бесконечный, вместо 10 записей записался миллион, щас буду копать. Link to comment Share on other sites More sharing options...
TemKa_SD Posted August 25, 2018 Author Share Posted August 25, 2018 (edited) Всё норм ))) Работаем дальше... Посмотрите по коду, пойдет? Edited August 25, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
siv1987 Posted September 10, 2018 Share Posted September 10, 2018 Не очень люблю подзапросы типа 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' ) 1 Link to comment Share on other sites More sharing options...
newbie Posted September 11, 2018 Share Posted September 11, 2018 По мере возможности старался использовать JOINТипы нужно писать в верхнем регистре. Это прихоть IPS Link to comment Share on other sites More sharing options...
siv1987 Posted September 11, 2018 Share Posted September 11, 2018 Поправил. Уже подзабыл. Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 12, 2018 Author Share Posted September 12, 2018 Спасибо Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now