我有五张桌子:
- tab_template
- 模板组
- 团体
- 用户组
- 用户
Tab_template 使用 template_group 关系表组织成组。使用 user_group 关系表将用户组织成组。组可以是公共的或私有的(使用表中的 tinyint 布尔列)。
我想查询所有 tab_templates 是:
- 与用户在同一组中
- 或在公共组中
这是我当前的查询:
SELECT * FROM tab_template
t
LEFT JOIN template_group
ON template_group
。tab_template_id
= t
。id
左group
加入template_group
。tab_template_id
= group
。id
LEFT JOIN user_group
ON TRUE
WHERE
group
。private
=0
OR
( template_group
. group_id
= user_group
. group_id
AND
user_group
. user_id
=2)
分组t
。id
;
它可以工作,而且它本身并不是超级慢,但是我加入 user_group 表的方式很hacky。
问题是我需要加入 user_group 表进行条件检查,但我只需要在组不是私有的情况下进行条件检查。
我知道我可以将另一个表添加到 FROM 子句 (FROM tab_template
t
, user_group
ug
) 中,而不是第三个 LEFT JOIN 与 ON TRUE 条件...但我不能这样做,因为 Yii 的 ActiveRecord 类与 DcCriteria 一起工作的方式我可以' t 修改语句的那部分。我可以编辑查询的任何其他部分,但不能编辑 FROM 子句。在此处查看 API:http ://www.yiiframework.com/doc/api/CDbCriteria 所以这就是我以我的方式加入 user_group 表的原因。一些 Yii 专家可能能够帮助我解决这个问题,但我不确定我的查询是否会通过 FROMing 表而不是 JOINing 来更快。
任何帮助将不胜感激!谢谢