1

基本的に、ソフトウェアの更新履歴を MySQL テーブルに記録しています。このデータを出力する際に​​、ソフトウェアバージョンの降順、つまり最新のバージョン更新情報が最初に出力されるようにしたいです。

次のクエリを使用しています。

SELECT * FROM updates WHERE productId='$productId' ORDER BY version DESC

次のテストデータについて:

1.0.0
0.9.8
2.4.2
1.7.0
1.7.1
17.2.1

出力は次のとおりです。

2.4.2
17.2.1
1.7.1
1.7.0
1.0.0
0.9.8

データに2つの「小数点」があるため、テーブルにdouble、floatなどとして保存できないため、varcharとして保存されます。

をリストの先頭にORDER BY version+0 DESC移動するクエリを入れてみましたが、小数点以下第2位に達するとキャストが壊れるため、上に移動し、テーブルの順序でデータを出力するだけです。17.2.11.7.01.7.1

次のようになるようにデータを並べ替える方法に関する提案は次のとおりです。

17.2.1
2.4.2
1.7.1
1.7.0
1.0.0
0.9.8

乾杯!

4

5 に答える 5

1

これはうまくいきます

select * from Table1
order by CAST(SUBSTRING_INDEX(version, '.', 1) as DECIMAL) DESC, 
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(version, '.', 2), '.', -1) as DECIMAL DESC,
CAST(SUBSTRING_INDEX(version, '.', -1) as DECIMAL) DESC;

フィドルをチェック

于 2013-10-04T09:11:26.673 に答える
0

ORDER BY バージョンではありませんが、

数字をピリオドまで抽出し、最初の数字、2 番目、3 番目の数字で並べ替える

このような:

ORDER BY firstVersionNumber, secondVersionNumber, thirdVersionNumber.

数値を抽出するには、文字列関数を使用します

于 2013-10-04T08:54:18.567 に答える