php - 用于创建组和邀请用户的正确表结构

标签 php mysql sql

我有下表

用户:uid、name_f、name_l...

group_data:id、group_id、管理员、受邀用户、订阅者...

例如,当用户“uid:4”创建一个群组并邀请他的 friend “uid:7”和 uid:9”时,我将插入到 group_data 表中:

'admin:4, invitedusers:4,7,9, subscribers:4,7,9'. I

如果例如 uid:9 不想接收通知,我只需将他/她从逗号分隔列表中删除,订阅者将其设为 'subscribers:4,7' 我也当管理员从组中删除用户时执行相同的操作,除非我更改了邀请用户列。

我知道这种设置非常有缺陷,我必须为受邀用户和订阅者创建一个新表。我只是在寻找一种创建该表的方法以及一个选择新系统中所有用户的 SQL 查询。

非常感谢任何帮助。另外,这个答案有点触及这个主题,但我不太理解结构引用,无法实现它:SQL Array Search

最佳答案

您应该为每个存在的用户创建一个包含一行的表,就像您已经做的那样。称之为“用户”。该表仅包含有关用户的信息,而不包含他们所属的组的信息。

您应该有另一个表,每组一行,您也这样做了。称之为“团体”。该表仅包含有关该组的信息,而不包含该组中的人员信息。

您应该有第三个表,其中每个用户所在的每个组各占一行。将其称为“user_groups”或其他名称。该表中的每一行都将“用户”表中的一个用户链接到“组”表中的一个组,并可能提供有关他们对该组的订阅的信息。

示例设置可能如下所示:

CREATE TABLE users (
    userID INT,
    firstName VARCHAR,
    lastName VARCHAR,
    PRIMARY KEY (userID)
);

CREATE TABLE groups (
    groupID INT,
    groupName VARCHAR,
    adminUserID INT,    /* this is the userID of the one and only administrator of this group */
    PRIMARY KEY (groupID)
);

CREATE TABLE user_groups (
    userID INT,
    groupID INT,
    invited TINYINT,    /* 0 or 1 to indicate true or false */
    subscribed TINYINT  /* 0 or 1 to indicate true or false */
);


编辑回答评论中的问题:

$groupID = 1;
$userIDArray = explode(",", $row["invitedusers"]);    // assuming that $row is a row from the old group_data table
foreach ($userIDArray as $userID)
    mysql_query("INSERT INTO user_groups (userID, groupID, invited) VALUES ('". mysql_real_escape_string($userID) ."', '". mysql_real_escape_string($groupID) ."', 1)");

关于php - 用于创建组和邀请用户的正确表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503620/

相关文章:

php - 如何将这段代码转为sql删除函数?

javascript - 如果 Paypal 交易成功,如何设置cookie

php - 在不使用插件的情况下在 wordpress 编辑器中启用表格选项

mysql - 获取 max(OrderPrice) 对应的 OrderDate

mysql - Google Cloud SQL SSL 未通过对等证书验证

php - laravel 加入仅限制 2 行

mysql - SQL 返回包含非 NULL 数据的字段列表

javascript - POST 数据在浏览器和 PHP 之间被 chop

javascript - 无法将编辑的内容存储到数据库

Mysql - 将多个 INT 字段连接在一起以创建 DATE 字段