Вы можете получить список всех зарегистрированных пользователей, запросив таблицу сессий.Я предполагаю, что вы используете Drupal 6.
<?php
$result = db_query('SELECT uid FROM {sessions} WHERE uid != 0');
$users = array();
while($user = db_fetch_array($result)) {
$users[] = user_load($user);
}
Запрос исключает сеансы для uid = 0
, так как это анонимные пользователи.$users
- это массив пользовательских объектов, как описано в Drupal API Docs .
Вы можете оптимизировать это, если вы уже знаете, какую часть пользовательских объектов вы будете использовать (например, толькоидентификатор пользователя и имя), удалив user_load () в цикле while и добавив к запросу соединение с таблицей users, поскольку каждый user_load () выполняет один дополнительный запрос.Ниже приведен список идентификаторов и имен пользователей, вошедших в систему:
<?php
$result = db_query('SELECT u.uid, u.name FROM {sessions} s INNER JOIN {users} u ON u.uid = s.uid WHERE s.uid != 0');
$users = array();
while($users[] = db_fetch_array($result));
Поскольку вошедшие в систему пользователи никогда не останавливаются (вы можете оставаться в системе неограниченное время), может быть полезно исключить зарегистрированных пользователейкто не заходил на сайт какое-то время (например, час бездействия):
$timestamp = time - 3600; // 3600s is one hour.
$result = db_query('SELECT uid FROM {sessions} WHERE uid != 0 AND timestamp >= %d', $timestamp);
Возможно, вы также захотите ограничить количество возвращаемых пользователей.Например, может быть, вы хотите захватить - самое большее - 10 последних зарегистрированных пользователей, которые обращались к сайту:
$limit = 10; // Limit to the last 10 users.
$result = db_query_range('SELECT uid FROM {sessions} WHERE uid != 0 ORDER BY timestamp DESC', $timestamp, 0, $limit);
В качестве отступления, если вы собираетесь использовать магические числа (например, $ limit или 3600), вы должны сделать их постоянными, используя variable_set (), variable_get () и variable_del ().