13

テーブルの値を、挿入された時刻から昇順で並べ替えるにはどうすればよいですか。タイムスタンプや自動インクリメントなど、この件に関する特別な列はありません。

これが推奨されていないことはわかっています...それでも、これを行う方法を知りたいです。

回答からわかるように、値が挿入される前にタイムスタンプや自動インクリメンタルなどの並べ替え列が追加されなかった場合、挿入によってそれらを並べ替える方法はありません。

4

4 に答える 4

13

ORDER BYクエリに句がないと、行が特定の順序で返されるという保証はありません。

テーブル内のすべての行のすべての列を返す簡単なクエリを考えてみましょう。例えば:

SELECT * FROM mytable ; 

そのクエリでは、MySQL がテーブルの先頭から完全なテーブル スキャンを実行する可能性があります。そのため、物理ストレージで見つかった順序で行が返される可能性があります。

これは、削除も更新も再編成も行われず、挿入された行のスペースが後で再利用され、新しく挿入された行を格納するために再利用された場合、行が挿入された順序にほぼ対応している可能性があります。

ただし、この動作は保証されていません。

挿入された順序で行を返すには、ORDER BY句を含めて、行が返される順序をクエリに指定する必要があります。

行が「挿入順序」で返されるためには、クエリがその情報を利用できるようにするか、それを導出できる必要があることを意味します。単一のテーブルに対する単純なクエリの場合、情報を行に格納する必要があることを意味します。

于 2012-07-25T18:56:27.587 に答える
1

あなたORDER BYのテーブルから何かを得ることができます。必要な注文を見つけるために使用できるものがそこにない場合、注文することはできません。

于 2012-07-25T18:46:20.767 に答える
1

テーブル内のデータによっては、データの ID で並べ替えることができる場合があります (PK の一意性を保証するためにデータに 1 つの増分整数がある場合)。データがキャプチャされてテーブルに記録されない限り、挿入順に並べ替える方法は他にありません。

テーブル レベルで指定されていないレコードに関する追加の (メタ) 情報を保持する MySQL については知りません。

于 2012-07-25T18:49:37.687 に答える
0

クエリを並べ替えるための列が必要です。通常、これは挿入タイムスタンプ、または増分 ID/増分キーになります。それ以外の場合、注文の記録がないため、注文を保証する方法はありません。

MySQL フォーラムの関連スレッド

于 2012-07-25T18:45:41.197 に答える