質問: ### 発生している問題・エラーメッセージ Rails+Mysqlでアプリを作成しています。 下記のようにmanage_idを生成する処理をsql文で実装したいのですが、どのようなsql文を書いたら良いか分からず、インターネット上のサンプルでは適当な情報が見当たらず、ご質問させていただきました。 自分で考えた限り、処理の流れとしては、期間指定で1ヶ月ごとにデータを取得し、そのデータの数をカウントし、シーケンス番号を振るような流れになると思っております。 命名規則 + + <各月ごとのシーケンス番号> モデル名:GyomuDatum | ID | manage_id | data | category_id | created_at | | --- | --- | --- | --- | --- | | 1 | A201804_001 | hoge | A | 2018-04-01 | | 1 | A201804_002 | hoge | A | 2018-04-01 | | 2 | B201805_001 | huga | B | 2018-05-01 | | 2 | B201805_002 | huga | B | 2018-05-01 | ### 補足情報(FW/ツールのバージョンなど) ・Rails Rails 4.2.10 ・Mysql mysql Ver 14.14 Distrib 5.7.22, for Linux (x86_64) using EditLine wrapper
回答: 以下が参考になるかと思います。 【MySQL】グループ毎に連番を振る > > `if(@groupid <> group_id, @no:=1, @no:=@no+1) as no` > > > 上記部分が連番を採版している箇所なので、と の条件に変更すれば良いかと。 ※@変数を使用しない方法もありますが変数使用したほうが高速です。 但し、データ削除がある場合は取得済みの連番の次としなければ重複が発生します。 何れにしても、連番項目をテーブルに持たせそれを条件や更新対象として方がスマートになるかと。