Fi1osof 30 марта 2013 0 0
Для знатоков 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.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(
    "principal_class" => 'modUser',
    "AND:ModzillaAccess.principal:=" => $uid,
));

$q->orCondition(array(
    "principal_class" => 'modUserGroup',
    "AND:membergroup.member:=" => $uid,
));

То есть здесь выборка делается или по пользователю, или по группе пользователя.
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.