Для знатоков SQL-я. Мне панадобилась хитрая выборка WHERE condition AND (condition2 OR condition3). Обратите внимание, что здесь принципиальная разница по сравнению с WHERE condition AND condition2 OR condition3, так как во втором случае в результат попадут записи по условию OR (третьего условия) независимо от успеха первого и второго условия. А так получается, что первое условие должно выполниться обязательно, а второе или третье — как получится (но обязательно хотя бы или первое, или второе). И само собой это должно быть на xPDO. Итак, запрос: uid=modx->user->get('id');
q=modx->newQuery('ModzillaAccess');
q−>leftJoin(′modUserGroupMember′,′membergroup′,"ModzillaAccess.principalclass=′modUserGroup′ANDModzillaAccess.principal=membergroup.usergroup");q->leftJoin('modAccessPolicy', 'policy', "ModzillaAccess.policy=policy.id");
$q->select(array(
"ModzillaAccess.*",
"policy.data as acl",
));
$q->where(array(
"target" => 1,
));
q−>andCondition(array("principalclass"=>′modUser′,"AND:ModzillaAccess.principal:="=>uid,
));
q−>orCondition(array("principalclass"=>′modUserGroup′,"AND:membergroup.member:="=>uid,
)); То есть здесь выборка делается или по пользователю, или по группе пользователя.