私はterm
DBを持っています。各用語はプライベートでもパブリックでもよい。
用語はproject
に編成されています。
user
テーブルもあります。選択しているプロジェクトに依存する公開プライベートレコードのSQL
それは次のようになり、私は公共の状況の世話をしてデータを取得するためにSQLを作ることだったと私は公共許可する必要があるかどうかを事前に知っていれば:
SELECT * FROM term
(
JOIN project ON (project.id = term.id_project)
WHERE term.public = trueWHERE public
だったかもしれないが、このような明確)
または
WHERE (term.public = true OR term.public = false)
(完全にスキップされますが、このような明確にされている可能性)
しかし、各ユーザー・プロジェクトの組み合わせ(user_project_mm
)は、プライベートプロジェクトを表示することを許可または拒否できます。
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]]
[[]]内のコードは明らかにSQLではありません。すぐに解決しようとするようなものを生み出します。これはここで必要なSQL書き換えの一種です。 AND term.public
を付加するかどうかの決定は、それぞれの特定の結果レコードフィールドuser_project_mm.private
に依存します。
私はPHPで後処理したくないのですが、これはLIMITで行われたページネーションを台無しにしてしまい、とにかく汚いからです。このためのクリーンなSQLソリューションはありますか?私はそれを十分に明確に説明しましたか?
が、私はそれがuser_project_mm.privateフィールドに$ CurrentUserにのために許可されています場合には(民間を含む)すべてのレコードを選択します。 私は、user_project_mm.privateフィールドにfalseを持つプロジェクトの公開レコードのみを選択します。 – Slawa