sql >> データベース >  >> RDS >> Mysql

グループに基づくMySQLの自動インクリメント

    次のようなクエリを使用できます:

    INSERT INTO autoinc (cid,info,customer)
    SELECT
        COALESCE(max(cid),0) +1
        , 'A Customer 1'
        , 12345
    FROM autoinc
    WHERE customer = 12345;
    

    サンプル

    mysql> SELECT * from autoinc;
    Empty set (0,00 sec)
    
    mysql> INSERT INTO autoinc (cid,info,customer)
        -> SELECT
        ->     COALESCE(max(cid),0) +1
        ->     , 'A Customer 1'
        ->     , 12345
        -> FROM autoinc
        -> WHERE customer = 12345;
    Query OK, 1 row affected (0,00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * from autoinc;
    +----+------+--------------+----------+
    | id | cid  | info         | customer |
    +----+------+--------------+----------+
    |  1 |    1 | A Customer 1 |    12345 |
    +----+------+--------------+----------+
    1 row in set (0,00 sec)
    
    mysql> INSERT INTO autoinc (cid,info,customer)
        -> SELECT
        ->     COALESCE(max(cid),0) +1
        ->     , 'A Customer 1'
        ->     , 12345
        -> FROM autoinc
        -> WHERE customer = 12345;
    Query OK, 1 row affected (0,00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * from autoinc;
    +----+------+--------------+----------+
    | id | cid  | info         | customer |
    +----+------+--------------+----------+
    |  1 |    1 | A Customer 1 |    12345 |
    |  2 |    2 | A Customer 1 |    12345 |
    +----+------+--------------+----------+
    2 rows in set (0,00 sec)
    
    mysql> INSERT INTO autoinc (cid,info,customer)
        -> SELECT
        ->     COALESCE(max(cid),0) +1
        ->     , 'B Customer 2'
        ->     , 9876
        -> FROM autoinc
        -> WHERE customer = 9876;
    Query OK, 1 row affected (0,00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * from autoinc;
    +----+------+--------------+----------+
    | id | cid  | info         | customer |
    +----+------+--------------+----------+
    |  1 |    1 | A Customer 1 |    12345 |
    |  2 |    2 | A Customer 1 |    12345 |
    |  3 |    1 | B Customer 2 |     9876 |
    +----+------+--------------+----------+
    3 rows in set (0,00 sec)
    
    mysql> INSERT INTO autoinc (cid,info,customer)
        -> SELECT
        ->     COALESCE(max(cid),0) +1
        ->     , 'A Customer 1'
        ->     , 12345
        -> FROM autoinc
        -> WHERE customer = 12345;
    Query OK, 1 row affected (0,00 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> SELECT * from autoinc;
    +----+------+--------------+----------+
    | id | cid  | info         | customer |
    +----+------+--------------+----------+
    |  1 |    1 | A Customer 1 |    12345 |
    |  2 |    2 | A Customer 1 |    12345 |
    |  3 |    1 | B Customer 2 |     9876 |
    |  4 |    3 | A Customer 1 |    12345 |
    +----+------+--------------+----------+
    4 rows in set (0,00 sec)
    
    mysql>
    


    1. 巨大なMySQLテーブルを削除する最も簡単な方法

    2. スクリプトの実行後にユーザーがフォームページに入力したデータを保存するにはどうすればよいですか?

    3. 二重にエンコードされたUTF8文字を修正する方法(utf-8テーブル内)

    4. WHEREに変数がある場合、MySQLクエリはインデックスを使用しません