Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

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

Рекомендованные сообщения

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

BaseW3mmdStats.php

Поделиться сообщением


Ссылка на сообщение

Если файл обновления статистики доступен публично, то просто делайте к нему запрос.

Поделиться сообщением


Ссылка на сообщение

Не понял

Поделиться сообщением


Ссылка на сообщение
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'];

 

чего не таке?

Поделиться сообщением


Ссылка на сообщение

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

 

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');

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
08/25/18 16:35 (изменено)

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

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
08/25/18 17:31 (изменено)

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

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

По мере возможности старался использовать JOIN

Типы нужно писать в верхнем регистре. Это прихоть IPS

Поделиться сообщением


Ссылка на сообщение

Поправил. Уже подзабыл.

Поделиться сообщением


Ссылка на сообщение

Спасибо

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...