TemKa_SD 9 11/22/18 09:02 Здравствуйте. Мне необходимо реализовать фильтр по картам, функционал весь готов, осталось вывести правильно сам фильтр. И так, структура БД: http://prntscr.com/llhs1f Мне нужно получить уникальные botid и gamename, так как они дублируются. Получил список уникальных botid: http://prntscr.com/llht3e это основа, по которой должен формироваться фильтр, id чекбоксов будет равен этому полю. Как мне получить имя игры? Т.е должно быть что-то вроде: select gamename from stats_gamelist where botid='' and id='здесь первый попавшийся автоинкримент, чтобы вывести только одно значение'; Наверно ничего не понятно....!!!!@@@###$$$ Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 09:10 Что-то вроде такого наверно: http://prntscr.com/llhyjg Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 09:14 Ну да, вот примерно так: http://prntscr.com/lli0qn http://prntscr.com/lli10w Поделиться сообщением Ссылка на сообщение
newbie 1723 11/22/18 09:19 Предоставляйте код. Нет желания писать по картинке. Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 09:20 (изменено) 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. И если я прав, везде так фёрст юзать? или надо форич? или я вообще бред несу? Изменено 22 ноября 2018 пользователем TemKa_SD Поделиться сообщением Ссылка на сообщение
newbie 1723 11/22/18 09:24 Как вариант foreach( \IPS\Db::i('wc3')->select( 'botid, gamename', 'stats_gamelist', NULL, 'botid ASC' ) as $bot ) { static::$cachedBotlist[$bot['botid']] = $bot['gamename']; } 1 Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 09:28 Ого, супер, то что надо думаю. Спасибки ) Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 09:37 Я немного отформитировал имя игры: http://prntscr.com/llid4m static::$cachedBotlist[$bot['botid']] = array_map('trim', explode('#', $bot['gamename']) ); можно как-то удалить ключ 1 из массива? эти данные не нужны просто. Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/22/18 09:48 можно как-то удалить ключ 1 из массива? эти данные не нужны просто. array_map('trim', explode('#', $bot['gamename']) )[0]илиcurrent( array_map('trim', explode('#', $bot['gamename']) ) ) В этом случае static::$cachedBotlist[$bot['botid']] будет содержать значение первого элемента массива кои является строка. Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 09:56 Спасибо, работает. Сделал еще массив, так как мне нужны еще данные. 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. Поделиться сообщением Ссылка на сообщение
newbie 1723 11/22/18 10:13 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']; } } 1 Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 10:43 (изменено) Правильно вывел кол-во игр? 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; } Не отвечайте, работает же ) Изменено 22 ноября 2018 пользователем TemKa_SD Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 10:50 А как ключ то вывести? http://prntscr.com/lljfcc И как лучше сделать, botid использовать в виде ключей или данных массива? Поделиться сообщением Ссылка на сообщение
newbie 1723 11/22/18 11:55 Не отвечайте, работает же ) Можно вместо count($bot['id']) писать 1 А как ключ то вывести? http://prntscr.com/lljfcc ....as $id => $bot}}И как лучше сделать, botid использовать в виде ключей или данных массива? Как хотите, так и делайте Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/22/18 12:08 Скажите еще вот что, я сделал всё на основе фильтра форумов, добавил data-controller="wc3.front.games.runningGamesFilter" и всё остальное. При нажатии нет обновления контента: https://dev.wc3.info/wc3/runningGames/ ну оно и понятно, наверное нужно через table делать. Какие варианты есть? Поделиться сообщением Ссылка на сообщение