Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
TemKa_SD

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

Recommended Posts

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

$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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Почему так не работает 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));
	}
}

Share this post


Link to post
Share on other sites

        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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Edited by TemKa_SD

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites
Вот так работает вроде, это правильная реализация?

Нет.

 

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

 

Допустим, что у всех установлено 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.

Share this post


Link to post
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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...