- 締切済み
GROUP BYで最新バージョン
バージョン管理データベースを作ろうとしています。 Anhttpd 1.42p Anhttpd 1.42o Anhttpd 1.42n 一太郎 10 一太郎 9 最新バージョンのみを絞り込みたいと思い、GROUP BYで抽出を試みました。 バージョンは末尾に英字を含むので文字列型にするしかなく、そうすると最大値のみ抽出とすると10より9が大きいということになってしまいます。 何かよい案はないでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hrm_mmm
- ベストアンサー率63% (292/459)
バージョンの数値で並べたいのか、配布開始日順で並べたいのか? まあ、version数なんて、1,2,3がいつのまにか2008だの2009だのになってたりするから、日付順で最新データがほしいというなら、各versionの配布開始日のカラムを作れば、日付け順に並べるのは簡単。
- chukenkenkou
- ベストアンサー率43% (833/1926)
>バージョンは末尾に英字を含むので文字列型にするしかなく 製品名 varchar(n) バージョン・リビジョン decなど 版識別子 char(1) とかに分け、検索時には必要ならconcat関数でくっつけるといった方法が扱いやすいのでは? どうしてもvarcharだけで管理したいというなら、 order by length(バージョン番号) desc,バージョン番号 desc といった凝った方法もありますけど、これだとインデクスを使ってくれないでしょうね。 いずれにしても、列構成、データ型、データの内容(形式)などが具体的でないので、具体的なアドバイスは難しいというか、何かアドバイスすれば、「実は、xxでyyできない」といった情報の小出しのような展開になるように思います。
- mullen0213
- ベストアンサー率32% (8/25)
バージョン管理という事は、今後も新しいバージョンが出た際にデータベースを更新する作業が伴ってきますよね? もしそうであれば、「ID」のカラムを設けてAUTO_INCREMENTでIDを自動で振るようにし、 古いバージョンの順にデータベースへ登録していって、IDによって最新版を抽出するようにしてはどうでしょう? そうすれば、今後の更新でどんなバージョン名が出ようとも対応できると思います。
お礼
アドバイスありがとうございます。 IDのフィールドももちろん用意してあるのですが、バグ回収などで2.00リリース以降に1.37Bとかのバージョンが出たりもするので、必ずしも新しいIDが最新ではないことがありえます。
お礼
アドバイスありがとうございます。 バージョン番号の整数桁は現在2桁のものがあるのがネックになっているので、1桁のものの先頭にゼロパディングして対処をしているところです。 末尾英字を分割する方法もよさそうなので、また詰まったら検討してみます。