Выборка пользователей по определенным параметрам
        Здравствуйте. 
Нужно получить выборку активных (не забаненых и т.д.) пользователей, со всеми их полями, принадлежащих группе с 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/            
                    
                Спасибо большое. Прочитал давно ответитьзабыл. Очень крутая табличка. Именно это и нужно было, не знал как загуглить)))            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.