Jump to content

Сложно сделать такой так под IPS?


TemKa_SD
 Share

Recommended Posts

Здравствуйте. Вот этот файл отвечает за обновление статистики на моем игровом сервере. Мне нужно сделать его в виде таска на IPS.

BaseW3mmdStats.php

Link to comment
Share on other sites

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

Не получается и всё. Пожалуйста, сделайте мне вот такой запрос.

 

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

Я разобрался, вроде работает без этого 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

Так. Сутки вожусь, с выше указанными вопросами я справился, сейчас вот застрял и не могу понять в чем проблема, часа 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 by TemKa_SD
Link to comment
Share on other sites

Карочи заработало, только цикл бесконечный, вместо 10 записей записался миллион, щас буду копать.

Link to comment
Share on other sites

Всё норм ))) Работаем дальше... Посмотрите по коду, пойдет?

Edited by TemKa_SD
Link to comment
Share on other sites

  • 3 weeks later...

Не очень люблю подзапросы типа 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' )

  • Upvote 1
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...