0

symbols私は2つの列symbolを持つテーブル(テーブルの名前は)を持っていますweight. このテーブルを重みに従って降順に並べ替えたいと思います。私はこれを使用してこれを行いました

ALTER TABLE symbols ORDER BY weight DESC

上記のステートメントにより、以下の出力が得られます。

x5  0.40
x3  0.20
x4  0.20
x1  0.10
x2  0.10

しかし、この並べ替えに適用するには、もう 1 つ制約する必要があります。テーブル ('x22',0.10) にもう 1 つのレコードを追加するとします。( ) の助けを借りて挿入およびソートした後ALTER TABLE symbols ORDER BY weight DESC、私のテーブルは次のようになります

x5  0.40
x3  0.20
x4  0.20
x1  0.10
x2  0.10
**x22   0.10**

しかし、私はこのような結果を得たい

x5  0.40
x3  0.20
x4  0.20
**x22   0.10**
x1  0.10
x2  0.10

テーブルに同じ重みのレコードが含まれている場合、新しく挿入されたレコードを一番上に表示したい。

Google で検索した結果、DB の設計が不適切であり、タイムスタンプ用の列をもう 1 つ追加する必要があることがわかりました。しかし、私はすでにテーブルにデータを持っていますが、テーブル構造を変更せずにクエリでこれを処理できますか? 前もって感謝します。

4

2 に答える 2

1

思い出させてもらえますか

ORDER BY を使用すると、行を特定の順序で並べた新しいテーブルを作成できます。挿入と削除の後、テーブルはこの順序のままではないことに注意してください。
...
ORDER BY は、ユーザー定義のクラスター化インデックス (PRIMARY KEY または NOT NULL UNIQUE インデックス) を含む InnoDB テーブルでは意味がありません。InnoDB は、そのようなインデックスが存在する場合、常にそれに従ってテーブル行を並べ替えます。

別の列を追加するだけです

ALTER TABLE symbols ADD COLUMN created_or_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

次に、単純にテーブルにクエリを実行します

SELECT * FROM symbols ORDER BY created_or_modified DESC;

または、auto_increment 列も可能です。

PS: マニュアルをさらに引用するには:

テーブルに大きな変更を加えた後にこのオプションを使用すると、パフォーマンスが向上する場合があります。場合によっては、後で並べ替えたい列によってテーブルが並べ替えられていると、MySQL の並べ替えが容易になることがあります。

「かもしれない」という言葉が多用されていることに注意してください。

于 2013-11-07T09:22:23.970 に答える
0

これを試して:

ALTER TABLE symbols ORDER BY symbol DESC, weight DESC

更新:idこれを使用できる列がある場合AUTO_INCREMENT:

ALTER TABLE symbols ORDER BY weight DESC, id DESC
于 2013-11-07T09:12:22.087 に答える