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

Помогите создать tasks

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

Как-то все запутано.

 

Если игрок с именем (поле name) temka_sd играл на сервере (поле spoofedrealm) Garena

И другой игрок с таким же именем (поле name) temka_sd играл на сервере (поле spoofedrealm) Rubattle.net

То какую запись Вы будете обновлять в таблице stats_forum_connections?

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


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

Обе, если обе записи там есть и с обоих аккаунтов играли за последние 30 дней.

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


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

$names = iterator_to_array(\IPS\Db::i()->select(
   "CONCAT(stats_gameplayers.name, stats_gameplayers.spoofedrealm)",
   'stats_gameplayers',
   array( 'UNIX_TIMESTAMP(stats_games.datetime)>?', \IPS\DateTime::create()->sub(new \DateInterval('P30D'))->getTimestamp()),
   null,
   null,
   array('stats_gameplayers.name', 'stats_gameplayers.spoofedrealm')
)->join(
   'stats_games',
   'stats_games.id=stats_gameplayers.gameid'
));

 

if (count($names))
{
   \IPS\Db::i()->update('stats_forum_connections', array('active' => 1), \IPS\Db::i()->in("CONCAT(name, server)", $names));    
}

  • Upvote 1

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


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

Так же делал, только без CONCAT. Спасибо, сейчас попробую.

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


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

Почему так не работает 0.

 

	public function execute()
{
       $db = \IPS\sharedstats\DB::get();
	$names = iterator_to_array($db::i('stats')->select(
	    "CONCAT(stats_gameplayers.name, stats_gameplayers.spoofedrealm)",
	    'stats_gameplayers',
	    array( 'UNIX_TIMESTAMP(stats_games.datetime)>?', \IPS\DateTime::create()->sub(new \DateInterval('P30D'))->getTimestamp()),
	    null,
	    null,
	    array('stats_gameplayers.name', 'stats_gameplayers.spoofedrealm')
	)->join(
	    'stats_games',
	    'stats_games.id=stats_gameplayers.gameid'
	));
	if (count($names))
	{
	    $db::i('stats')->update('stats_forum_connections', array('active' => 1), $db::i('stats')->in("CONCAT(name, server)", $names));
	}
	else {
		$db::i('stats')->update('stats_forum_connections', array('active' => 0), $db::i('stats')->in("CONCAT(name, server)", $names));
	}
}

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


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

        else {
           $db::i('stats')->update('stats_forum_connections', array('active' => 0), $db::i('stats')->in("CONCAT(name, server)", $names));
       }

А что Вы тут пытаетесь обновить, если массив $names пуст, и запрос выглядит так

UPDATE stats_forum_connections SET active=0 WHERE 1=0

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


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

Да, массив пусть как и должно быть, т.е за последние 30 дней игры не найдены, и нужно установить active=0.

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


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

Да, массив пусть как и должно быть, т.е за последние 30 дней игры не найдены, и нужно установить active=0.

 

Кому Вы собираетесь устанавливать active=0, если в результате запроса получено 0 записей?

 

Устанавливайте всем active=0, а после устанавливайте active=1 юзерам, игравшим за последние 30 дней.

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


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

Всё правильно, а если после установки active - 1 игрок не играл в течении 30 дней, нужно вернуть 0.

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


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

1. Ставьте всем 0

2. Ставьте 1 тем, кто играл.

 

В чем проблема?

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


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

Проблема в том, что, c 1 на 0 не переключает, если игрок не играл за последние 30 дней.

 

Еще раз, смотрите: изначально у всех стоит 0, затем модуль присваивает 1 тем, кто играл за последние 30 дней, с этим всё в порядке. Проходит еще 2 дня, а игрок не играл, т.е уже 32 дня, модуль не возвращает 0, остается 1.

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


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

Покажите весь код.

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


Ссылка на сообщение
08/15/18 07:32 (изменено)

Код таска? Сейчас такой: http://ipbskins.ru/forum/topic15678.html/page__view__findpost__p__104914

 

Т.е здесь должно быть ИНАЧЕ обновить на 0. Т.е если игрок не играл в течении 30 дней, должен обновить на 0, а он не обновляет (

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

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


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

Вот так работает вроде, это правильная реализация?

 

	public function execute()
{
       $db = \IPS\sharedstats\DB::get();
	$names = iterator_to_array($db::i('stats')->select(
	    "CONCAT(stats_gameplayers.name, stats_gameplayers.spoofedrealm)",
	    'stats_gameplayers',
	    array( 'UNIX_TIMESTAMP(stats_games.datetime)>?', \IPS\DateTime::create()->sub(new \DateInterval('P200D'))->getTimestamp()),
	    null,
	    null,
	    array('stats_gameplayers.name', 'stats_gameplayers.spoofedrealm')
	)->join(
	    'stats_games',
	    'stats_games.id=stats_gameplayers.gameid'
	));
	if (count($names))
	{
	    $db::i('stats')->update('stats_forum_connections', array('active' => 1), $db::i('stats')->in("CONCAT(name, server)", $names));
	}
	else {
		$db::i('stats')->update('stats_forum_connections', array('active' => 0));
	}
}

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


Ссылка на сообщение
Вот так работает вроде, это правильная реализация?

Нет.

 

Вы не учитываете старых юзеров.

 

Допустим, что у всех установлено active=0

User1 -> active=0

User2 -> active=0

User3 -> active=0

User4 -> active=0

User5 -> active=0

User6 -> active=0

...

User100 -> active=0

 

Задача выполняется и находит юзеров, игравших за последние 30 дней: User1, User2, User3

User1 -> active=1

User2 -> active=1

User3 -> active=1

User4 -> active=0

User5 -> active=0

User6 -> active=0

...

User100 -> active=0

 

Задача выполняется и находит юзеров, игравших за последние 30 дней: User1, User2, User3, User4

User1 -> active=1

User2 -> active=1

User3 -> active=1

User4 -> active=1

User5 -> active=0

User6 -> active=0

...

User100 -> active=0

 

Если каждый раз будут находиться игроки, то код $db::i('stats')->update('stats_forum_connections', array('active' => 0)); не будет выполняться, но через 31 день у юзеров User1, User2, User3 должен быть active=0.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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