Перейти к публикации
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.

Фильтр по играм

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

Здравствуйте. Мне необходимо реализовать фильтр по картам, функционал весь готов, осталось вывести правильно сам фильтр.

 

И так, структура БД: http://prntscr.com/llhs1f

 

Мне нужно получить уникальные botid и gamename, так как они дублируются.

 

Получил список уникальных botid: http://prntscr.com/llht3e это основа, по которой должен формироваться фильтр, id чекбоксов будет равен этому полю.

 

Как мне получить имя игры?

 

Т.е должно быть что-то вроде: select gamename from stats_gamelist where botid='' and id='здесь первый попавшийся автоинкримент, чтобы вывести только одно значение';

 

Наверно ничего не понятно....!!!!@@@###$$$

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

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

Что-то вроде такого наверно: http://prntscr.com/llhyjg

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

Предоставляйте код. Нет желания писать по картинке.

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

public static function getBotlist()
{
	if( static::$cachedBotlist === NULL )
	{
        foreach( \IPS\Db::i('wc3')->select( 'botid', 'stats_gamelist', NULL, 'botid ASC', array(), NULL, NULL, 1 ) as $bot )
        {
            static::$cachedBotlist[] = $bot = [
            	'botid'  => $bot,
            	'gamename'  => 'Imya Igry',
            ];
        }
	}

	return static::$cachedBotlist;
}

 

Я думаю, нужно что-то вроде: 'gamename' => 'Здесь select gamename ->first()',

Ну еще мне надо вывести кол-во Игр botid по полю ID наверно и игроков по полю total. И если я прав, везде так фёрст юзать? или надо форич? или я вообще бред несу?

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

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

Как вариант

            foreach( \IPS\Db::i('wc3')->select( 'botid, gamename', 'stats_gamelist', NULL, 'botid ASC' ) as $bot )
           {
               static::$cachedBotlist[$bot['botid']] = $bot['gamename'];
           }

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

Ого, супер, то что надо думаю. Спасибки )

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

Я немного отформитировал имя игры: http://prntscr.com/llid4m

 

static::$cachedBotlist[$bot['botid']] = array_map('trim', explode('#', $bot['gamename']) );

можно как-то удалить ключ 1 из массива? эти данные не нужны просто.

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

можно как-то удалить ключ 1 из массива? эти данные не нужны просто.

array_map('trim', explode('#', $bot['gamename']) )[0]

или

current( array_map('trim', explode('#', $bot['gamename']) ) )

 

В этом случае static::$cachedBotlist[$bot['botid']] будет содержать значение первого элемента массива кои является строка.

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

Спасибо, работает. Сделал еще массив, так как мне нужны еще данные.

 

public static function getBotlist()
{
	if( static::$cachedBotlist === NULL )
	{
           foreach( \IPS\Db::i('wc3')->select( 'id, botid, gamename, totalplayers', 'stats_gamelist', NULL, 'botid ASC' ) as $bot )
           {
               static::$cachedBotlist[$bot['botid']] = [
				'gamename'   => current( array_map('trim', explode('#', $bot['gamename']) ) ),
				'players'   => $bot['totalplayers']
               ];
           }
	}

	return static::$cachedBotlist;
}

 

Результат: http://prntscr.com/llil02

 

Помогите еще с players, сейчас выводит просто поле из выше выбранных игр, мне нужно посчитать ПО ВСЕМ играм http://prntscr.com/llime1 т.е вот обведенные данные нужно сложить и результат положить в один botid.

Опубликовано:
foreach( \IPS\Db::i('wc3')->select( 'id, botid, gamename, totalplayers', 'stats_gamelist', NULL, 'botid ASC' ) as $bot )
{
if (!isset(static::$cachedBotlist[$bot['botid']]))
{
	static::$cachedBotlist[$bot['botid']] = [
		'gamename'   => current( array_map('trim', explode('#', $bot['gamename']) ) ),
		'players'   => $bot['totalplayers']
	];					
}
else
{
	static::$cachedBotlist[$bot['botid']]['players'] += $bot['totalplayers'];
}
}

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

Правильно вывел кол-во игр?

 

public static function getBotlist()
{
	if( static::$cachedBotlist === NULL )
	{
		foreach( \IPS\Db::i('wc3')->select( 'id, botid, gamename, totalplayers', 'stats_gamelist', NULL, 'botid ASC' ) as $bot )
		{
		    if (!isset(static::$cachedBotlist[$bot['botid']]))
		    {
		        static::$cachedBotlist[$bot['botid']] = [
		            'gamename'   => current( array_map('trim', explode('#', $bot['gamename']) ) ),
		            'games'   => count($bot['id']),
		            'players'   => $bot['totalplayers']
		        ];                  
		    }
		    else
		    {
		        static::$cachedBotlist[$bot['botid']]['players'] += $bot['totalplayers'];
		        static::$cachedBotlist[$bot['botid']]['games'] += count($bot['id']);
		    }
		}
	}

	return static::$cachedBotlist;
}

 

Не отвечайте, работает же )

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

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

А как ключ то вывести? http://prntscr.com/lljfcc

 

И как лучше сделать, botid использовать в виде ключей или данных массива?

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

Не отвечайте, работает же )

 

Можно вместо count($bot['id']) писать 1

 

А как ключ то вывести? http://prntscr.com/lljfcc

 

....as $id => $bot}}

И как лучше сделать, botid использовать в виде ключей или данных массива?

 

Как хотите, так и делайте
Опубликовано:
  • Автор

Скажите еще вот что, я сделал всё на основе фильтра форумов, добавил data-controller="wc3.front.games.runningGamesFilter" и всё остальное. При нажатии нет обновления контента: https://dev.wc3.info/wc3/runningGames/ ну оно и понятно, наверное нужно через table делать. Какие варианты есть?

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

Вы же уже делали что-то подобное.

 

Или сейчас ajax/cookie не нужны?

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

Сейчас на странице 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.