Salut,

Après des heures de prise de tête sur une requête je vous propose de m'éclairer sur cette dernière.
J'ai des petites lacune en SQL donc soyez sympas si ça vous parait simple

j'ai 3 tables :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
objet {id, nom}
objet_identite {id, objet_id, identite_id, lecture, ecriture, modification}
identite {id, nom}
J'aimerais avoir dans mon résultat de requête un tableau contenant :
objet.id, objet.nom, objet_identite.lecture, objet_identite.ecriture, objet_identite.modification

La petite subtilité c'est que ma table objet_identite est null de base et se remplit en fonction des droits activés.

Pour exemple :
j'ai 3 objets (id = 1, objet = toto; id = 2, objet = titi; id = 3, objet = tutu)
et 3 identités (id = 1, nom = admin; id = 2, nom = compta; id = 3, nom = secret)
et j'ai activé tous les droits pour l’identité admin sur l'objet titi, j'ai donc dans la table objet_identite (id = 1, objet_id = 2, identite_id = 1, lecture = true, ecriture = true, suppression = true)

je voudrais en affichage si je suis sur l’identité admin :
LIGNE 1 :
objet.id = 1, objet.nom = toto, objet_identite.lecture = false, objet_identite.ecriture = false, objet_identite.modification = false
LIGNE 2 :
objet.id = 2, objet.nom = titi, objet_identite.lecture = true, objet_identite.ecriture = true, objet_identite.modification = true
LIGNE 3 :
objet.id = 3, objet.nom = tutu, objet_identite.lecture = false, objet_identite.ecriture = false, objet_identite.modification = false

et sur l’identité compta :
LIGNE 1 :
objet.id = 1, objet.nom = toto, objet_identite.lecture = false, objet_identite.ecriture = false, objet_identite.modification = false
LIGNE 2 :
objet.id = 2, objet.nom = titi, objet_identite.lecture = false, objet_identite.ecriture = false, objet_identite.modification = false
LIGNE 3 :
objet.id = 3, objet.nom = tutu, objet_identite.lecture = false, objet_identite.ecriture = false, objet_identite.modification = false

Alors ma requête actuellement ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT o.id, o.nom, oi.lecture, oi.creation, oi.modification, oi.suppression
            FROM objet o
            LEFT JOIN objet_identite oi ON oi.objet_id = o.id
            WHERE oi.identite_id = $identiteId (variable selon l'identite choisi)
            OR oi.identite_id IS NULL
Ça fonctionne quand je suis en identite admin j'ai bien ce que je veux en revanche quand je suis en compta ou secret ma ligne titi n'est plus là (logique car maintenant elle existe).
J'ai essayé avec un différent de (<>) mais il compte pas les null du coup je l'ai dans l'os...

En espérant que ce soit clair j’attends vos réponse