如何为每组用户实现序列号数据库?

时间:2012-07-13 08:08:59

标签: php mysql

创建用于存储sequence个数字的数据库表很容易;但此设计适用于为所有用户共享sequence的事件。我想要的是为每个用户创建sequence:此group可以随时增长,因为它是一个数据库表,即管理员可以创建一个组任何时间和用户都被分配到特定组。那么如何根据一个群体实现sequence代呢?

1 个答案:

答案 0 :(得分:4)

如果您使用的是myisam

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

以下从上述链接中提取。

  

对于MyISAM和BDB表,您可以在a上指定AUTO_INCREMENT   多列索引中的辅助列。在这种情况下,   AUTO_INCREMENT列的生成值计算为   MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。这是   当您想要将数据放入有序组时非常有用。

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL,
    id MEDIUMINT NOT NULL AUTO_INCREMENT,
    name CHAR(30) NOT NULL,
    PRIMARY KEY (grp,id)
) ENGINE=MyISAM;

INSERT INTO animals (grp,name) VALUES
    ('mammal','dog'),('mammal','cat'),
    ('bird','penguin'),('fish','lax'),('mammal','whale'),
    ('bird','ostrich');

SELECT * FROM animals ORDER BY grp,id;
Which returns:

+--------+----+---------+
| grp    | id | name    |
+--------+----+---------+
| fish   |  1 | lax     |
| mammal |  1 | dog     |
| mammal |  2 | cat     |
| mammal |  3 | whale   |
| bird   |  1 | penguin |
| bird   |  2 | ostrich |
+--------+----+---------+

对于你的情况:

CREATE TABLE mytable (
   user_id MEDIUMINT NOT NULL AUTO_INCREMENT,
    group_id MEDIUMINT NOT NULL,   
     user_name CHAR(30) NOT NULL,
    PRIMARY KEY (group_id,user_id)
     ) ENGINE=MyISAM;


INSERT INTO mytable (group_id, user_name) VALUES
     (1,'alex'),(1,'jenny'),(2,'baz'),(1,'tim'),(2,'danny'),(3,'joe');


SELECT * FROM mytable ORDER BY group_id,user_id;

返回:

user_id group_id    user_name
1            1          alex
2            1          jenny
3            1          tim
1            2          baz
2            2          danny
1            3          joe