gpt4 book ai didi

php - 考虑用户访问级别,为聊天室应用程序中的每个用户分配空间

转载 作者:行者123 更新时间:2023-11-29 19:27:16 25 4
gpt4 key购买 nike

我有两个表:room 和 with_access_room

id | name | access_level | image_id     --- room

user_id | room_id | token --- with_access_room

有3种类型的房间:

  • 公开:每个人都可以看到(无论注册与否)
  • 私有(private):只有注册用户才能看到
  • 私有(private)访问权限:只有注册用户才能创建,除了创建者获得特殊 token 来邀请其他用户之外,没有人可以看到它。

现在在主页上我必须展示我的房间。假设我有一个 id = 1 的用户。所以他可以看到他创建的所有公共(public)、私有(private)(不需要访问 token )和私有(private)房间(有访问权限)。

在 access_level 中,第 0 列是公共(public)的,第 1 列是私有(private)的。

例如:

房间

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 的用户必须看到这些“表”

ID | name | access_level | image_id | token
1 | aaa | 1 | 1 | NULL
2 | bbb | 0 | 2 | NULL
3 | ccc | 1 | 3 | xyz

我正在使用 Yii 2

哪种带有参数的 SQL 查询或 Yii 2 模型方法可以给我想要的结果?

最佳答案

我认为您没有描述足够的信息来代表问题。缺少信息:

  • 数据中如何表示“私有(private)且有权访问”?
  • “创造者”代表在哪里?
  • 我们如何知道谁已注册?

我可以猜测这些问题的合理答案。最后,查询将如下所示:

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 中有一行。

关于php - 考虑用户访问级别,为聊天室应用程序中的每个用户分配空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42051781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com