我正在开发一个与我正在开发的简单ACL模块有很多关系的问题。
我有三张桌子:
组
权限
RelPermissionsGroup
所以我有了这个查询
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重复。
我该怎么办?
答案 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`
中引用。