Database API: получить список ролей с количеством пользователей
Потребовалось мне в задаче получить одним запросом из БД список всех ролей и количество пользователей, относящихся к каждой роли. Не сказать, что задач сложная, однако определенное время я на составление этого запроса потратил.
Получилось у меня следующее (Drupal Database API):
- $query = db_select('role', 'r');
- $query->leftJoin('users_roles', 'ur', 'ur.rid = r.rid');
- $query->addExpression('COUNT(ur.rid)', 'user_count');
- $query->fields('r', array('rid', 'name'));
- $query->groupBy('r.rid');
-
- $result = $query->execute();
- $roles = array();
-
- while ($record = $result->fetchAssoc()) {
- $key = $record['name'];
- $roles[$key] = $record['user_count'];
- }
Самым тонким моментом оказалось использование
вместо привычного ('COUNT(ur.rid)'
. Разница в том, что для второго случая роли, у которых нет пользователей, также получат количество "1". А если поменять ('COUNT(*)'
на leftJoin
, то можно так и не узнать, что некоторые роли существуют.innerJoin
Добавить комментарий