J'ai 4 tables (parmi beaucoup d'autres - juste en montrant les pertinentes). Ils sont:Requête MySQL Tricky avec des jointures?
- "utilisateurs"
- id
- Nom
- ROLE_ID
- "rôles"
- id
- Nom
- "chapter_role_view_permissions"
- id
- chapter_id
- ROLE_ID
- "chapitres"
- id
- Nom
J'essaye de construire une requête qui me retournera une liste de tous les utilisateurs, leur nom de rôle, tous les chapitres par utilisateur, et s'ils ont ou non l'accès de vue à chaque chapitre. Disons donc qu'il y a 2 utilisateurs et 2 chapitres. L'utilisateur 1 est role_id = 1 et l'utilisateur 2 est role_id = 2. Et les chapter_role_view_permissions a 1 enregistrement (id: 1 | chapter_id: 1 | role_id: 1) ce qui signifie que seuls les utilisateurs avec role_id = 1 peut voir le chapitre 1.
Le résultat de la requête Je cherche devrait être quelque chose comme:
| --- users.id --- | --roles.id --- | --- chapters.id-- | -can_view_chapter- |
| ------ 1 ------ | ----- 1 ------- | ------- 1 -------- | ----------- 1 ----------- |
| ------ 1 ------ | ----- 1 ------- | ------- 2 -------- | ----------- 0 ----------- |
| ------ 2 ------ | ----- 2 ------- | ------- 1 -------- | ----------- 0 ----------- |
| ------ 2 ------ | ----- 2 ------- | ------- 2 -------- | ----------- 0 ----------- |
Une idée à quoi pourrait ressembler la requête?Je ne veux pas avoir à faire un nouveau champ dans chapter_role_view_permissions qui dit « permis » et insérer de nouveaux enregistrements pour chaque type de rôle soit autorisé = 1 ou autorisé = 0
En prime, j'ai une table supplémentaire, je dois rejoindre les résultats de cette appelés « quiz_user_statuses » qui se joindront aux chapitres. id field et users.id champ qui dit ce que cet utilisateur a marqué sur ce chapitre particulier (et ont NULL si l'enregistrement n'existe pas AKA ils n'ont pas encore pris le quiz du chapitre ou ils n'ont pas la permission de répondre au quiz). – user1418227