J'ai une base de données term
. Chaque terme peut être privé ou public.
Les termes sont organisés en project
s. Il existe également un tableau user
.SQL pour les enregistrements publics privés qui dépendent du projet sélectionné
Si je devais faire un SQL pour récupérer les données en prenant soin du statut public et je sais à l'avance si je dois permettre à public, il ressemblerait à ceci:
SELECT * FROM term
(aurait pu être
JOIN project ON (project.id = term.id_project)
WHERE term.public = trueWHERE public
, mais plus clair comme ça)
ou
WHERE (term.public = true OR term.public = false)
(aurait pu être évitée complètement, mais plus clair comme ça)
mais, chaque combinaison utilisateur-projet (user_project_mm
) peut être autorisé ou refusé pour voir des projets privés. Essayer de résoudre droite donne loin quelque chose comme:
SELECT * FROM term
JOIN project ON (project.id = term.id_project)
JOIN user_project_mm ON (user_project_mm.id_project = project.id)
WHERE user_project_mm.id_user = $currentUserID
[[IF user_project_mm.private THEN NOTHING ELSE AND term.public = true]]
Le code à l'intérieur [[]] est manifestement pas SQL. C'est une sorte de réécriture SQL qui est nécessaire ici. La décision d'ajouter ou non AND term.public
dépend de chaque champ d'enregistrement de résultat particulier user_project_mm.private
.
Je ne veux pas post-traiter avec PHP car cela ruinerait ma pagination faite avec LIMIT et c'est sale quand même. Existe-t-il une solution SQL propre pour cela? Est-ce que je l'ai expliqué assez clairement?
Je veux sélectionner tous les enregistrements (y compris privé) si elle est autorisée pour $ currentUser dans le domaine user_project_mm.private. Je veux sélectionner SEULEMENT les enregistrements publics pour les projets qui ont faux dans le champ user_project_mm.private. – Slawa