gpt4 book ai didi

mysql - 聊天室应用程序的数据库设计

转载 作者:行者123 更新时间:2023-11-29 23:58:25 56 4
gpt4 key购买 nike

编辑

人们认为这个问题太宽泛,所以我在这里缩小范围:

我有一个带有双主键的表:roomID 和 userID。

以下是一些示例数据:

房间ID |用户ID

1 | 5

1 | 9

1 | 10

1 | 12

2 | 5

2 | 9

2 | 10

3 | 5

3 | 17

给定用户列表:5、9、10,如何返回仅包含这些用户的 roomID?所以在这种情况下它应该返回 2。

我希望这可以在 1 个 SQL 查询内完成。

如有任何帮助,我们将不胜感激。

<小时/>

原始问题

我正在制作一个聊天室应用程序,需要为其设计一个数据库后端。所有房间都是动态创建的,并在最后一个用户退出房间时被销毁。用户可以将其他用户添加到他们所在的任何房间。

目前这是我的设计:

我有一个有两列的聊天室表。这两列都是表的主键(因此仅当两列相同时才认为行是重复的)。第一列是房间 ID。第二列是用户 ID。我这里的想法是使用相同的房间 ID,这个房间中可以有许多用户(因此具有相同房间 ID 但不同用户 ID 的行)。当我需要创建一个新房间时,我只需选择 MAX(房间 ID) + 1 并使用该 ID 创建一个新房间并将用户添加到其中。

给定用户 ID 列表(例如 1,5,31,12),我需要查明是否已为他们创建了房间。换句话说,我需要确定是否存在具有相同房间 ID 且用户 ID 为 1、5、31、12 的行。但是,如果房间是由用户 1、5、31、12、6(一个或多个额外用户)创建的,则不应算作已创建的房间。然后,我需要为他们创建一个新房间并将用户添加到其中。对于少于列表的用户也是如此。

现在,我在构建查询以确定是否需要创建新房间时遇到问题,如果不需要,则检索现有房间的房间 ID。

如有任何帮助,我们将不胜感激。

另外,我觉得这个设计比较麻烦,欢迎大家提出更好的数据库设计。

附注我使用的数据库是MySQL

最佳答案

我认为你可以在聊天室表中再添加 1 个列,名称为 num_member,这是房间中的成员数量(或者最好有 room(room_id, number_member) 表)。首先为了简单起见,我假设您在聊天室中有 num_member 。此查询可能有效:

Select * From chatroom where user_id IN ($userIdList) Group by room_id HAVING count(*) = chatroom.num_member

希望这有帮助

关于mysql - 聊天室应用程序的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25202742/

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