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 :
J'aimerais avoir dans mon résultat de requête un tableau contenant :
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}
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 :
Ç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).
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
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![]()







Répondre avec citation
Partager