Выборка пользователей по определенным параметрам
Здравствуйте.
Нужно получить выборку активных (не забаненых и т.д.) пользователей, со всеми их полями, принадлежащих группе с id 4, от имени которых (createdby) существуют ресурсы, принадлежащие контексту moscow и опубликованные в данный момент.
Нужен нормальный запрос с $modx->newQuery(). Что бы потом можно было foreach $users… $user->get('username') получил имя пользователя, или например дополнительное поле пользователя extended.specialisation и другие.
Я вроде верно написал запрос в обычном синтаксисе, помогите пожалуйста с xPDO или как его зовут))
Нужно получить выборку активных (не забаненых и т.д.) пользователей, со всеми их полями, принадлежащих группе с id 4, от имени которых (createdby) существуют ресурсы, принадлежащие контексту moscow и опубликованные в данный момент.
Нужен нормальный запрос с $modx->newQuery(). Что бы потом можно было foreach $users… $user->get('username') получил имя пользователя, или например дополнительное поле пользователя extended.specialisation и другие.
Я вроде верно написал запрос в обычном синтаксисе, помогите пожалуйста с xPDO или как его зовут))
SELECT u.username, ua.* FROM `modx_users` as u
LEFT JOIN modx_member_groups as g ON g.member = u.id
LEFT JOIN modx_site_content as c ON c.createdby = u.id
LEFT JOIN modx_user_attributes as ua ON ua.internalKey = u.id
WHERE g.user_group = 4
AND c.published = 1
AND u.active = 1
AND c.context_key = 'moscow'
GROUP BY u.id
Спасибо заранее! Комментарии: 12
ап)
$sql = "SELECT u.username, ua.* FROM `modx_users` as u
LEFT JOIN modx_member_groups as g ON g.member = u.id
LEFT JOIN modx_site_content as c ON c.createdby = u.id
LEFT JOIN modx_user_attributes as ua ON ua.internalKey = u.id
WHERE g.user_group = 4
AND c.published = 1
AND u.active = 1
AND c.context_key = 'moscow'
GROUP BY u.id";
$q = $modx->prepare($sql);
$q->execute();
$users = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($users as $v) {
echo $v['username'];
}
Извините, но так я и сам умею)) я ждал что-то вроде:
$xpdo->newQuery('Box',array(
'width:>' => 10,
));
Просто вроде как такие запросы лучше чем обычный запрос. Может быть вы умеете?
Хех))) завтра буду у компа, попробую помочь. А пока вот пример джойна на xPDO: ilyaut.ru/cheats/sample-resources-filled-with-tv-settings/
Спасибо. Сегодня попробую)
а чем такие запросы лучше?
Они безопаснее, если в них будут подставляться какие-то пользовательские данные.
Например, когда вы захотите сделать поиск по выбранным строкам с помощью
Например, когда вы захотите сделать поиск по выбранным строкам с помощью
"...
AND `username` LIKE = '%{$_GET['search']}%'
..."
можно получить XSS
prepare подготавливает запрос) И тоже защищает от этого, если правильно писать запрос)
Как-то так получилось. Запрос несложный, надо учиться такие составлять))
$q = $modx->newQuery('modUser');
$q->leftJoin('modUserGroupMember',
'UserGroup',
'UserGroup.member = modUser.id '.
'AND UserGroup.user_group = 4');
$q->leftJoin('modResource',
'Resource',
'Resource.createdby = modUser.id '.
'AND Resource.published = 1 '.
'AND Resource.context_key = "moscow"');
$q->leftJoin('modUserProfile',
'Profile',
'Profile.internalKey = modUser.id');
$q->groupby('modUser.id');
$q->select(array(
'modUser.*',
'Profile.*'
));
$q->where(array(
'modUser.active' => 1,
'Resource.id:IS NOT' => NULL
));
$count = $modx->getCount('modUser', $q);
if ($q->prepare() && $q->stmt->execute()) {
$users = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
}
echo "<p><b>Всего пользователей найдено: {$count}</b></p>";
foreach($users as $user) {
echo "<p>{$user['username']} ({$user['internalKey']})</p>";
}
Спасибо большое. Сегодня потестирую. Я бы сам написал, но я не знал какие имена таблиц использовать. В смысле вот если из site_content нужно использовать modResources и т.д.
Вот здесь можно подсмотреть: ilyaut.ru/modx-object-full-reference/
Спасибо большое. Прочитал давно ответитьзабыл. Очень крутая табличка. Именно это и нужно было, не знал как загуглить)))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.