3

私のデータベースには、1。grade、2。gradeなどのグレードを含む名前列を持つテーブルがあります。数値が10以上になると、ソートされたレコードセットで10.gradeが2.gradeの前に来るため、ソートが希望どおりに機能しません。これは、文字列の並べ替えが整数の並べ替えとは異なるためです。問題は、これらの文字列を数値で並べ替える方法です。

成績記録は祖先プラグインを使用して構築されたツリーの一部であるため、並べ替えコード全体を:order => "(結果を並べ替えるコード)"内に配置する必要があります。

私は試し:order => "CAST(SUBSTRING_INDEX(name, '.') AS SIGNED)"ました。しかし、これは機能しません。

開発環境ではSQLiteを使用し、本番環境ではMySQLを使用しています。

4

1 に答える 1

3

これを試して:

定数値を置き換えます'。空の文字列を含む列のgrade'を実行すると、数値が取得されます。同じものをintにキャストします

order by cast(replace(name,'. grade','') as int)

編集

あなたのコメントによると、それが常に「グレード」ではない場合は、試してみてください

order by cast(left(name,LOCATE('.',name,1)-1) as  UNSIGNED)


SQLフィドルデモ

于 2012-10-08T08:30:23.187 に答える