Хитрый запрос с условием

Для знатоков SQL-я. Мне панадобилась хитрая выборка WHERE condition AND (condition2 OR condition3). Обратите внимание, что здесь принципиальная разница по сравнению с WHERE condition AND condition2 OR condition3, так как во втором случае в результат попадут записи по условию OR (третьего условия) независимо от успеха первого и второго условия. А так получается, что первое условие должно выполниться обязательно, а второе или третье — как получится (но обязательно хотя бы или первое, или второе). И само собой это должно быть на xPDO. Итак, запрос: uid=uid = modx->user->get('id'); q=q = modx->newQuery('ModzillaAccess'); q>leftJoin(modUserGroupMember,membergroup,"ModzillaAccess.principalclass=modUserGroupANDModzillaAccess.principal=membergroup.usergroup");q->leftJoin('modUserGroupMember', 'membergroup', "ModzillaAccess.principal_class='modUserGroup' AND ModzillaAccess.principal = membergroup.user_group"); 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:="=>q->andCondition(array( "principal_class" => 'modUser', "AND:ModzillaAccess.principal:=" => uid, ));

q>orCondition(array("principalclass"=>modUserGroup,"AND:membergroup.member:="=>q->orCondition(array( "principal_class" => 'modUserGroup', "AND:membergroup.member:=" => uid, )); То есть здесь выборка делается или по пользователю, или по группе пользователя.