【发布时间】:2014-10-01 21:19:52
【问题描述】:
编辑
人们认为这个问题过于宽泛,所以我在这里缩小范围:
我有一个带有双主键的表: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(room ID) + 1 并使用此 ID 创建一个新房间并将用户添加到其中。
给定一个用户 ID 列表(例如 1、5、31、12),我需要确定是否已经为他们创建了房间。换句话说,我需要确定是否存在所有具有相同房间 ID 且用户 ID 为 1、5、31、12 的行。但是,如果一个房间是由用户 1、5、31、12、6(一个或多个额外用户)创建的,这不应算作已创建的房间。然后我需要为他们创建一个新房间并将用户添加到其中。对于少于列表的用户也是如此。
现在我无法形成查询以确定是否需要创建新房间,如果不需要,则检索现有房间的房间 ID。
任何帮助将不胜感激。
另外,我觉得这个设计比较麻烦,欢迎大家提出更好的数据库设计。
附:我使用的数据库是 MySQL
【问题讨论】:
-
这个问题似乎是题外话,因为它是关于设计批评
-
措辞有误。我认为主要问题是:如何在 MySQL 中比较两组。不过,询问数据库设计的部分有点离题。
标签: mysql database-design chat