質問: こんにちは。個人で頑張ったのですが、どうしても困難な問題にぶつかったので、SQLに詳しい方、アドバイスしていただけるとうれしいです。 mysqlで、あるテーブルのデータを並べ替えたうえで、オートインクリメントのidを一意に割り振りたいと思います。 「club」テーブルにname,dateという2つのカラムがあります。 nameは個人名が入力されており、dateは個人に関する日付を入れています。 今、このテーブル内にあるデータをまずdateでソートして、次にnameでソートし、その順番でidを割り振りたいと思います。 解決方法をgoogleで調べましたが、そもそもオートインクリメントするIDカラムはテーブル作成時に付与するのが普通のようで、テーブルが作成された後に付与するのはあまり考えられないケースのようです。既存のテーブルをソートしてからIDを付与する方法となると、さがしても資料を見つけられませんでした。 そこで自分で解決方法を模索することにしました。 まず最初に、SQLを分けて考えました。 ソートするSQL文は select * from club order by date asc,name asc; オートインクリメントするidを追加するSQL文は alter table club add id int not null primary key auto_increment; であるので、この2つを組み合わせたらうまくできるのかと思っています。 しかし alter table club add id int not null primary key auto_increment where select * from club order by date asc,name asc; や alter table club add id int not null primary key auto_increment order by date asc, name asc; などで試してもうまくいきません。 select * from club order by date asc,name asc; alter table club add id int not null primary key auto_increment; と連続で通しても、最初のバラバラデータにIDがばらばらに付加されるだけでした。 いよいよ方法を思いつかなくなってしいました。 詳しい方、正しい方法をご教示願います。
回答: 新しいテーブルを作り、そこへSELECT~INSERTする方法はいかがでしょうか。 1現在のclubテーブルをリネーム。 2オートインクリメントがある新しいclubテーブルを作成。 3旧clubテーブルを希望の並び順でSELECTした結果をINSERT。 ただ、既存のテーブルにトリガーなどガチガチに仕込まれている場合、リネームが面倒な時がありますが・・・。