我目前正在开发用户系统,并希望为每个成员设置多个用户组/排名。我在这里看到其他帖子通过使用外键,非规范化表等来解释它......但它们都是从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;
例如(问题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.
}
}
编辑,因为我的第一篇帖子显然不够清晰。
有人可以帮忙吗?