2

sequence数値を格納するためのデータベーステーブルを作成するのは簡単です。sequenceただし、この設計は、がすべてのユーザーで共有されるイベントに適しています。私が欲しいのは、ユーザーのグループsequenceごとに作成することです。これはデータベーステーブルであるため、いつでも拡張できます。つまり、管理者はいつでもグループを作成でき、ユーザーは特定のグループに割り当てられます。では、グループに従って生成を実装するにはどうすればよいでしょうか。groupsequence

4

1 に答える 1

4

myisamを使用している場合

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

以下は上記のリンクから抜粋したものです。

MyISAMおよびBDBテーブルの場合、複数列インデックスの2次列に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
于 2012-07-13T08:12:54.193 に答える