我有四个MySQL表:
usuarios (列出所有用户及其个人信息)
角色(拥有网站中可用角色的列表,确定其权限)
rolesUsuarios (将每个用户与其角色相关联。他们可以拥有多个用户)
cursos (包含每个课程描述的网站课程列表)
cursosUsuarios (将每个用户与他们注册的所有课程相关联)
我想制作一个SELECT查询,向我展示特定用户,他们的所有个人信息,他所拥有的角色以及他注册的课程。
我创建了这个有效的查询:
SELECT usuarios.userID, usuarios.userEmail, usuarios.userApellido, usuarios.userNombres,
usuarios.userDNI, usuarios.userFechaGeneracion,
rolesUsuarios.userID, rolesUsuarios.nombreRol,
cursosUsuarios.userID, cursosUsuarios.cursoID,
cursos.cursoID, cursos.nombreCurso, cursos.cursoYear, cursos.cursoMes,
cursos.modalidadCurso,
GROUP_CONCAT(cursos.nombreCurso, ':', cursosUsuarios.cursoID ORDER BY cursosUsuarios.cursoID SEPARATOR ',') AS 'cursos'
FROM usuarios JOIN rolesUsuarios JOIN cursosUsuarios JOIN cursos
WHERE usuarios.userID='10'
AND rolesUsuarios.userID = usuarios.userID
AND cursosUsuarios.userID = usuarios.userID
AND cursosUsuarios.cursoID = cursos.cursoID
GROUP BY usuarios.userID
问题是,如果用户未注册任何课程,则不会显示任何结果。我该怎么办?
这些是每个表结构:
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,
userApellido char(50) null,
userNombres char(50) null,
userDNI int(10) null,
userPass char(65) null,
userFechaGeneracion char(10) null
);
CREATE TABLE rolesUsuarios (
rolesUsuariosID int unsigned not null auto_increment primary key,
userID int not null,
nombreRol char(50) not null
);
CREATE TABLE cursos (
cursoID int unsigned not null auto_increment primary key,
nombreCurso char(100) not null,
cursoYear int(4) not null,
cursoMes char(3) not null,
cursoFechaInicio char(10) null,
modalidadCurso char(50) not null
);
CREATE TABLE cursosUsuarios (
cursosUsuariosID int unsigned not null auto_increment primary key,
userID int not null,
cursoID int not null
);
答案 0 :(得分:1)
我觉得这样的事情会奏效:
SELECT usuarios.userID, usuarios.userEmail, usuarios.userApellido, usuarios.userNombres,
usuarios.userDNI, usuarios.userFechaGeneracion,
rolesUsuarios.userID, rolesUsuarios.nombreRol,
cursosUsuarios.userID, cursosUsuarios.cursoID,
cursos.cursoID, cursos.nombreCurso, cursos.cursoYear, cursos.cursoMes,
cursos.modalidadCurso,
GROUP_CONCAT(cursos.nombreCurso, ':', cursosUsuarios.cursoID ORDER BY cursosUsuarios.cursoID SEPARATOR ',') AS 'cursos'
FROM usuarios LEFT JOIN rolesUsuarios
ON usuarios.userID = rolesUsuarios.userID
LEFT JOIN cursosUsuarios
ON usuarios.userID = cursosUsuarios.userID
LEFT JOIN cursos
ON cursosUsuarios.cursoID = cursos.cursoID
WHERE usuarios.userID='10'
GROUP BY usuarios.userID;
此外,如果您在WHERE子句中选择单个userID,则不需要GROUP BY userID行。