私は4つのMySQLのテーブルがあります。MYSQL SELECTクエリ:4つのテーブルをAND条件とOR条件で連結する方法は?
usuarios(すべてのユーザのリストとその個人情報を持っている)
役割を(彼らの許可を決定し、サイトで使用可能なロールのリストを持っています)
rolesUsuarios(リンク役割を持つ各ユーザー。彼らは複数を持つことができます)
cursosは私がすることを示しているSELECTクエリを作りたい
cursosUsuarios(リンク彼らが登録されているすべてのコースで、各ユーザー)
(各コースの説明とサイトのコースのリストを持っています)特定のユーザーのための私の個人情報、すべての個人情報、彼が持っている役割、彼が登録しているコース。
私はありません。このクエリを作成した作業:
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
);
あなたは 'inner'ジョインに相当することをしています - レコードは結合の両側のテーブルに存在しなければなりません。代わりに 'left'または' right'結合が必要です。適切な 'select table1 join table2 join table3'型構文を使用して、結合タイプの指定を容易にします。 –
私はちょうどそのような複雑なSELECT(少なくとも私に複雑な)でそれを変更する方法を理解していない – Rosamunda