2013-06-12 3 views
-1

Я пытаюсь понять этот запрос из приложения CakePHP 2.3, которое должно получить все разрешения ACL в одном поиске. Мне сложно отслеживать соединения и узлы «lft» «rght».Не понимаю этот SQL-запрос

SELECT 
     theAro.id as AroId, 
     theAro.parent_id as AroParentId, 
     theAro.alias as AroAlias, 
     theAro.model as AroModel, 
     theAco.id as AcoId, 
     theAco.parent_id as AcoParentId, 
     theAco.alias as AcoAlias, 
     theAco.rght as AcoRight, 
     permissions._create as CanCreate, 
     permissions._read as CanRead, 
     permissions._update as CanEdit, 
     permissions._delete as CanDelete 
     FROM acos AS theAco, aros AS theAro INNER JOIN aros_acos AS permissions ON 
     (permissions.id = 
      (SELECT permissions.id FROM aros_acos AS permissions INNER JOIN acos AS ruleAco ON 
       (ruleAco.id = permissions.aco_id) INNER JOIN aros AS ruleAro ON 
       (permissions.aro_id = ruleAro.id) 
       WHERE ruleAco.lft <= theAco.lft 
       AND ruleAco.rght >= theAco.rght 
       AND theAro.lft >= ruleAro.lft 
       AND theAro.rght <= ruleAro.rght 
       ORDER BY 
       ruleAro.lft DESC, 
       ruleAco.lft DESC LIMIT 1 
      ) 
     )WHERE theAco.id = '$actionAcoId' AND permissions._create = 1 ORDER BY theAro.lft ASC 
+0

Так что, возможно, мне следовало спросить: «Что делает этот запрос?» * Sheesh * – jRoB

ответ

1

Откройте командную строку sql, если сможете, и попробуйте запустить простейшую форму запроса, например. SELECT theAro.id как AroId FROM aros AS theAro; Теперь попробуйте добавить каждый путь запроса последовательно логически, воссоздавая исходный запрос и отмечая, что он делает по пути. то есть какие данные удаляются, какие данные остаются, какие новые данные появляются при добавлении дополнительных условий, пока вы не заново создали весь запрос.

Смежные вопросы