我有一个term
数据库。每个术语可能是私有的或公共的。
术语被组织成project
s。
还有一张user
桌子。
如果我要创建一个 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 解决方案?我解释得够清楚了吗?