加入MySQL和PHP的别名

时间:2011-08-29 07:46:39

标签: php mysql join

我正在开发一个与我正在开发的简单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很好,但鉴于字段是重复的,它会覆盖它们。此外,id_group和id_permission似乎分别与group和permission重复。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

你应该写'SELECT groups.id_group group_id,groups.name as group_name ...'

答案 1 :(得分:1)

您必须明确命名字段,如此

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`中引用。