1

現在、INT値は次のようにソートされているため、MySQLの結果で自然ソートを使用する必要があります。

  • 1
  • 123
  • 1256
  • 22
  • 231

[等]

私はそれを次のように並べ替える必要がありますが

  • 1
  • 22
  • 231
  • 1256

「natsort」関数は知っていますが、MySQLクエリ結果では機能しません。どうすれば(自然に)並べ替えることができますか?クエリ内でこれを行うことは可能ですか?

助けてくれてありがとう!

編集:クエリ例$result = mysql_query("SELECT * FROM forums ORDER BY 'posts' DESC;");

私のDESCの使用が有効かどうかは完全にはわかりませんが、エラーはスローされないため、問題ないはずです。残念ながら、DESCをASCに変更しても効果がないようです...

4

3 に答える 3

2

そこに投稿したクエリは、列の名前や位置ではなく、定数の文字列式で並べ替えています。バッククォートを使用して引用するか、引用符を取り出します。

SELECT * FROM forums ORDER BY `posts` DESC

または多分

SELECT * FROM forums ORDER BY posts DESC

ASCとDESCを変更しても効果がない理由を説明します。

最初の答えは:

説明するソート順は、INT値が実際に文字タイプとして格納されている(またはソート前に文字に変換されている)ことを示しています。

データを数値タイプと文字タイプのどちらで保存しているかを確認してください。可能であれば数値タイプを使用すると、自然な並べ替え順序は必要に応じて決まります。基になるデータ型をINTに変更できない場合は、おそらくパフォーマンスを犠牲にして、クエリでこれを行うことができます(たとえば、 CASTを使用)。

于 2010-02-01T00:08:01.550 に答える
1

投稿がINT以外の列である場合は、次のことを試すことができます。

SELECT * FROM forums ORDER BY CAST(`posts` AS INT) DESC

http://drupal.org/project/natsortもご覧ください。これは、MySQLの並べ替えを容易にするために使用できるDrupalモジュールです。

于 2012-11-15T16:50:21.347 に答える
0

この質問には、私が使用したMySQLに対する回答があります。

于 2010-02-01T00:13:43.547 に答える