Псевдоним с объединением в MySQL и PHP - PullRequest
1 голос
/ 29 августа 2011

У меня возникли проблемы со связями многие ко многим с простым разрабатываемым модулем ACL.

У меня есть три таблицы:

Группы

  • * id_group
  • имя

Права доступа

  • * id_permission
  • имя

RelPermissionsGroup

  • * id_relation
  • группа
  • разрешение

Итак, у меня был этот запрос

SELECT * FROM acl_groups 
LEFT OUTER JOIN acl_RelPermissionsGroup 
  ON acl_groups.id_group = acl_RelPermissionsGroup.group 
LEFT OUTER JOIN acl_permissions 
  ON acl_permissions.id_permission = acl_RelPermissionsGroup.permission 
WHERE id_group > 0

Если я сделаю запрос в phpmyadmin, то все будет хорошо. Таким образом, он показывает всем группам, есть ли у них разрешения или нет, а также показывает их.

Я вижу здесь одну проблему: атрибут name повторяется. Как я могу псевдоним каждого поля? Но это не проблема.

Проблема в том, что выполнение mysqli_fetch_assoc работает нормально, за исключением группы, у которой нет никаких разрешений. Вот что выводит:

    Array ( 
[id_group] => 2 
[name] => 
[id_relation] => 
[group] => 
[permission] => 
[id_permission] => 
)

Идентификатор группы в порядке, но учитывая тот факт, что поля дублируются, он переопределяет их. Кроме того, id_group и id_permission, кажется, дублируются с группой и разрешением соответственно.

Что мне делать?

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Вы должны будете назвать поля явно, например, так:

SELECT
  ag.name as group_name
  ,ap.name as permission_name
  ,ar.`group` as permission_group_id 
FROM acl_groups ag 
LEFT OUTER JOIN acl_RelPermissionsGroup ar ON ag.id_group = ar.`group` 
LEFT OUTER JOIN acl_permissions ap ON ap.id_permission = ar.permission 
WHERE id_group > 0

Не забывайте, что group является зарезервированным словом и должно быть заключено в кавычки `group` примерно так.

1 голос
/ 29 августа 2011

Вы должны написать 'SELECT groups.id_group group_id, groups.name как group_name ...'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...