我有一个属于某个角色的用户列表。MYSQL:显示所有用户角色清单的查询
我有三个MySQL表:用户,角色和的UserRole这既涉及表。
对于“编辑用户”表单,我需要在角色表中显示所有可用角色的列表,并从中显示所有可用角色列表,以显示用户所属的列表。
我在查询中遇到问题,因为如果我尝试按角色名输出列表分组(避免重复),所有用户都不会出现在列表中。如果我避免分组,角色列表会有重复。 我试着用DISTINCT,输出仍然重复。
这里是我的查询:
SELECT roles.roleID, roles.nombreRol AS rolusuario,
usuarios.userID AS usuarioid,
rolesUsuarios.userID, rolesUsuarios.nombreRol
FROM roles LEFT JOIN rolesUsuarios
ON roles.nombreRol = rolesUsuarios.nombreRol
LEFT JOIN usuarios
ON rolesUsuarios.userID = usuarios.userID
SELECT roles.roleID, roles.nombreRol AS rolusuario,
usuarios.userID AS usuarioid,
rolesUsuarios.userID, rolesUsuarios.nombreRol
FROM roles LEFT JOIN rolesUsuarios
ON roles.nombreRol = rolesUsuarios.nombreRol
LEFT JOIN usuarios
ON rolesUsuarios.userID = usuarios.userID
GROUP BY roles.nombreRol
我也试着改变的任命为测试顺序:
SELECT roles.roleID, roles.nombreRol,
usuarios.userID,
rolesUsuarios.userID, rolesUsuarios.nombreRol
FROM usuarios LEFT JOIN rolesUsuarios
ON usuarios.userID = rolesUsuarios.userID
LEFT JOIN roles
ON roles.nombreRol = rolesUsuarios.nombreRol
GROUP BY roles.nombreRol
但这样一来,我只得到一个结果列表其中有用户的角色。
这是我的三个表:
CREATE TABLE roles(
roleID int unsigned not null auto_increment primary key,
nombreRol char(50) not null
);
CREATE TABLE usuarios(
userID int unsigned not null auto_increment primary key,
userEmail char(50) null,
...
);
CREATE TABLE rolesUsuarios (
rolesUsuariosID int unsigned not null auto_increment primary key,
userID int not null,
nombreRol char(50) not null
);
一个很好的经验法则是'从不使用逗号连接语法',并且绝对不会将它与常规连接语法结合使用 – Strawberry