用户系统 - 多个用户组

时间:2016-08-24 17:25:08

标签: php mysql sql

我目前正在开发用户系统,并希望为每个成员设置多个用户组/排名。我在这里看到其他帖子通过使用外键,非规范化表等来解释它......但它们都是从2010年到2012年,所以不确定是否有更简单/更好的标准方法。

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(80) NOT NULL,
  `email` varchar(80) NOT NULL,
  `character_name` varchar(50) NOT NULL,
  `verify` int(5) NOT NULL,
  `rank` varchar(50) NOT NULL,
  `position` int(10) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX (`email`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3;

CREATE TABLE IF NOT EXISTS `rank` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `rank` varchar(50) NOT NULL,
  `position` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;

以上是我的两张桌子。以下是两个表结构,每个结构中有三个示例:

users
id | username | password | email | character_name | verify | rank | position
1 | userA | passA | A@A | characterA | yes | mem | 1
2 | userB | passB | B@B | characterB | yes | mod | 1
3 | userC | passC | C@C | characterC | yes | adm | 3

rank
id | rank | position
1 | mem | 1
2 | mod | 1
3 | adm | 3

用户应该能够处于多个级别。

userA应该只是一个mem userB应该是mem和mod userC应该是mem,mod和adm。

如果我要加入两个表:

SELECT * FROM rank INNER JOIN users ON rank.position = users.position;  
  1. 这会导致userA成为mem和mod,因为两者的位置都是1?
  2. 从用户中删除排名和排名,排名位置以及根据用户ID加入会更有意义吗?
  3. 例如(问题2):

    users
    id | username | password | email | character_name | verify
    1 | userA | passA | A@A | characterA | yes
    2 | userB | passB | B@B | characterB | yes
    3 | userC | passC | C@C | characterC | yes

    rank
    id | rank
    1 | mem
    2 | mem
    2 | mod
    3 | mem
    3 | mod
    3 | adm

    SELECT * FROM rank INNER JOIN users ON rank.id = users.id;
    

    一旦被选中,我希望某些职级能够做某些事情。

    $sql = SELECT * FROM rank INNER JOIN users ON rank.id = users.id;
    $ranks = $conn->query($sql);
    $ranks->execute();
    foreach ($ranks as $row) {
      if($row['rank'] == "mem" {
        Do something.
      }
      if($row['rank'] == "mod" {
        Do something else.
      }
      if($row['rank'] == "adm" {
        Do another something else.
      }
    }
    
    1. 以上是否正确?
    2. 编辑,因为我的第一篇帖子显然不够清晰

      有人可以帮忙吗?

0 个答案:

没有答案
相关问题