Как посчитать количество с ActiveRecord?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
stats2000
Сообщения: 38
Зарегистрирован: 2014.10.18, 11:45

Как посчитать количество с ActiveRecord?

Сообщение stats2000 » 2014.11.01, 18:07

Добрый день.
Как посчитать количество городов в таблице ?

Код: Выделить всё

`id`,`user`,`country_id`,`city_id` 
Как получить просто кол-во записей - понятно

Код: Выделить всё

<?= User::find()->count()?>
А как посчитать количество городов у пользователя?
Я сам запрос не понимаю по подсчету уникальных городов.
Найти все группы и подсчитать количество групп? а как group делать в AR?

astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Как посчитать количество с ActiveRecord?

Сообщение astronin » 2014.11.01, 19:12

во первых поясните что это за таблица, пользователей(User)? тогда у вас получается у одного пользователя только один город, в связи с чем, не понятен вопрос...
напишите плиз sql который вы хотите получить и таблицы желательно тоже напишите, какие используются

stats2000
Сообщения: 38
Зарегистрирован: 2014.10.18, 11:45

Re: Как посчитать количество с ActiveRecord?

Сообщение stats2000 » 2014.11.01, 19:19

Да, наверное, плохо объяснил.

Задача показать "На нашем сайте пользователи из 56 городов".
У пользователя да, один город. Мне нужно, чтобы запрос прошел по всем пользователям и посчитал количество городов, которые вообще есть в таблице юзер (уникальных, конечно). Только количество. Сами названия не нужны
таблица

Код: Выделить всё

 User (`id,`username`,`city_id`,`country_id`)

Код: Выделить всё

  City ( `id`,`city_name`)

Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: Как посчитать количество с ActiveRecord?

Сообщение Faenir » 2014.11.01, 19:24

city_id > 0 (или not null) + distinct + ->count() + кеширование)

BMW M6
Сообщения: 106
Зарегистрирован: 2014.07.13, 23:19
Откуда: Воронеж

Re: Как посчитать количество с ActiveRecord?

Сообщение BMW M6 » 2014.11.01, 20:16

Код: Выделить всё

$city= User::find()->where(Тут условие что и как выбирать)->count(); 
Хотя тут наверно придётся использовать findSql.

kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Как посчитать количество с ActiveRecord?

Сообщение kawabanga » 2014.11.01, 22:45

select count(city_id) from (select DISTINCT city_id from user) as t;
вот так должно работать.

stats2000
Сообщения: 38
Зарегистрирован: 2014.10.18, 11:45

Re: Как посчитать количество с ActiveRecord?

Сообщение stats2000 » 2014.11.02, 08:58

Да, всем спасибо большое. Запустил не через AR

Код: Выделить всё

select count(city_id) from (select DISTINCT city_id from user) as t; 
, а через

Код: Выделить всё

 $connection= \Yii::$app->db; 
$command=$connection->createCommand
, всё работает.

stats2000
Сообщения: 38
Зарегистрирован: 2014.10.18, 11:45

Re: Как посчитать количество с ActiveRecord?

Сообщение stats2000 » 2014.11.02, 09:17

А тогда в догонку еще один вопрос. Как сделать AJAX поиск по нескольким полям - сразу по user, city_id, country_id, org_name . В Yii1 можно было по addCriteria OR
Ну тоже просто сделать запрос sql с OR? А что делать, если у меня выводится org_name через Yii::t? Как подставить Yii::t() (Использую typeahead от kartik)

Код: Выделить всё

public function actionCountryList($q = null) {
$query = new Query;
$query->select('org_name','city_id,'user')
->from('')
->where('name LIKE "%' . $q .'%" ')
->orderBy('name');
$command = $query->createCommand();
$data = $command->queryAll();
$out = [];
foreach ($data as $d) {
$out[] = ['value' => $d['name']];
}
echo Json::encode($out);
}
В

Код: Выделить всё

foreach ($data as $d) {
$out[] = ['value' => $d['name']];
вставить обработку через Yii::t() ?

Ответить