0

したがって、私の問題は次のとおりです。MySQLデータベースからアイテムのリストを取得し、その後Javascriptで並べ替えたい(動的に編集できます)。主な問題は数字と文字です。これがデータベース内のリストであると仮定します。

3, a, 2, 1, b

ステートメントは次のようになります。

a, b, 1, 2, 3

しかし、私はそれを次のようにしたいと思います。

1, 2, 3, a, b

私のデータベースはですがutf8_unicode_ci、それは役に立ちません。それでも間違った結果が生成されます。(アイテムに「2some56thing」という名前を付けることもでき、「asome56thing」の前に配置する必要があるため、数字かどうかを確認してから上に並べ替えることはできません)。

4

4 に答える 4

0

このリンクが役立つかもしれません: http://matthewturland.com/2008/11/05/natural-ordering-in-mysql/

これを試して:

ORDER BY CONCAT(`name`, `login`)+0, CONCAT(`name`, `login`)
于 2012-07-10T20:13:13.180 に答える
0

mysql にはどのロケール設定がありますか?

私のソートはこの出力を取得します:

SELECT * FROM sorting ORDER BY a;
+------+
| a    |
+------+
| 1    |
| 2    |
| 3    |
| a    |
| b    |
+------+
于 2012-07-10T20:13:25.997 に答える
0
sort(function(a, b) {
    // Stuff to get the text out of the DOM
    return textb > texta;
}

が より大きい場合、カスタム比較関数から -1 (または 0 未満の任意の数) を返す必要があります。より良い:textatextb

    return textb>=texta ? textb>texta ? 1 : 0 : -1;

また

    return textb>texta - texta>textb;

また

    return texta.localeCompare(textb);
于 2012-07-10T20:14:05.293 に答える
0

>演算子だけを使用しないでください。

独自のソート関数を実装しているので、好きなだけ複雑にすることができます。

まず、textatextbが同じ型かどうかを検出し、そうでない場合は、数値が文字列の前にあることを示します (どの変数が数値型であるかに応じて、1 または -1 を使用します)。

それらが同じタイプの場合、 を使用できますが>、それは実際には適切ではありません。比較演算子は、ブール値ではなく数値を返す必要があります。

したがって:

 (a == b) ? 0 : ( (a < b) ? -1 : 1 )
于 2012-07-10T20:15:53.590 に答える