TemKa_SD 9 08/23/2018 03:19 PM Здравствуйте. Вот этот файл отвечает за обновление статистики на моем игровом сервере. Мне нужно сделать его в виде таска на IPS.BaseW3mmdStats.php Share this post Link to post
newbie 1,721 08/24/2018 10:40 AM Если файл обновления статистики доступен публично, то просто делайте к нему запрос. Share this post Link to post
TemKa_SD 9 08/24/2018 12:17 PM 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']; чего не таке? Share this post Link to post
TemKa_SD 9 08/24/2018 04:00 PM Не получается и всё. Пожалуйста, сделайте мне вот такой запрос. 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'); Share this post Link to post
TemKa_SD 9 08/24/2018 05:13 PM Я разобрался, вроде работает без этого 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'); Share this post Link to post
TemKa_SD 9 08/25/2018 04:35 PM (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 Share this post Link to post
TemKa_SD 9 08/25/2018 05:01 PM Карочи заработало, только цикл бесконечный, вместо 10 записей записался миллион, щас буду копать. Share this post Link to post
TemKa_SD 9 08/25/2018 05:31 PM (edited) Всё норм ))) Работаем дальше... Посмотрите по коду, пойдет? Edited August 25, 2018 by TemKa_SD Share this post Link to post
siv1987 2,623 09/10/2018 05:30 PM Не очень люблю подзапросы типа 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 Share this post Link to post
newbie 1,721 09/11/2018 05:17 AM По мере возможности старался использовать JOINТипы нужно писать в верхнем регистре. Это прихоть IPS Share this post Link to post