我有两张桌子:room和with_access_room
id | name | access_level | image_id --- room
user_id | room_id | token --- with_access_room
有三种类型的房间:
现在在主页面我必须展示我的房间。考虑我有一个id = 1的用户。所以他可以看到他创建的所有公共,私有(不需要访问令牌)和私人房间(有访问权限)。
在access_level列中,0是公共的,1是私有的。
例如:
室
id | name | access_level | image_id
1 | aaa | 1 | 1
2 | bbb | 0 | 2
3 | ccc | 1 | 3
4 | ddd | 1 | 4
with_access_room
user_id | room_id | token
1 | 3 | xyz
2 | 4 | zyx
所以id = 1的用户必须看到这些“table”
ID | name | access_level | image_id | token
1 | aaa | 1 | 1 | NULL
2 | bbb | 0 | 2 | NULL
3 | ccc | 1 | 3 | xyz
我正在与Yii 2合作
使用params的哪个SQL查询或Yii 2模型方法可以给我想要的结果?
答案 0 :(得分:0)
我认为你没有描述足够的信息来代表问题。缺少信息:
我能猜出这些问题的合理答案。最后,查询将如下所示:
select r.*
from room r
where access_level = 0 or
(access_level = 1 and
1 in (select user_id from users u where is_registered = 1)
) or
(access_level = 2 and
1 in (select user_id from with_access_room war where war.room_id = r.id)
);
这假定创建者在with_access_room
中有一行。
答案 1 :(得分:0)
此查询应该有效:
select `id`, `name`, `access_level`, `image_id`, `token` from `room`
left join `with_access_room` on `id`=`room_id`
where `access_level`=0
or `user_id`=1
or `id` not in (select `room_id` from `with_access_room`)
order by `id`