Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Сложно сделать такой так под 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');

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

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

  • 3 недели спустя...
Опубликовано:

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

Опубликовано:

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

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

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

Опубликовано:
  • Автор

Спасибо

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.