2009-11-27 20 views
5

Mysqlでは、select SQL文を実行すると、ソート句が含まれていないとデフォルトの順序があり、デフォルトの順序を逆にする方法はありますか? DESCを追加するだけですか?Mysqlでデフォルトの順序を逆にする方法は?

+0

重複:http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order/1793162#1793162 –

+0

"デフォルトの注文"あなたはそれを "逆"にすることはできません。 –

答えて

3

ORDER BY句を指定しないと、保証された順序はありません。したがって、 'デフォルト順序の逆'は定義されていません。

+0

クレームをバックアップする証拠の回答を好む人のために:https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries – Patrick

1

私はあなたが実際に望む順序を指定することでより良いサービスを提供できると思います。テーブルはその性質上、順序がありません。おそらく、行が挿入された順番で表示されるだけですが、その順序にとどまるという保証はありません。

チャンスです、あなたはおそらくこれを追加する:

ORDER BY id DESC 

...あなたがしたい場合は、ほとんどの時間は、人々が「ID」

+0

しかし、残念なことに、テーブルには「Id」フィールドはありません。 – Steven

+0

しかし、Idフィールドまたはそれと同等のものがない場合は、意味のある順序ですか? – pavium

+0

私は、行が挿入された既定の順序は、既定の順序は "最初に挿入、最後に"と思う。私はそれを "最初に挿入された、最初に"に変更したいと思います。 – Steven

5

と呼ばれる自動インクリメントフィールドを使用しますので、データが一貫して発注されるようにするには、ORDER BYの後にクエリを注文する列を続けて使用する必要があります。 ASCがデフォルトであるため、指定する必要はありません。 IE:

ORDER BY your_column 

...と等価です:

ORDER BY your_column ASC 

ASC/DESCは、列ごとにあります。たとえば:

ORDER BY first_column, second_column DESC 

...クエリが降順に昇順、second_columnfirst_columnを使用して組み合わせとして結果セットを並べ替えることを意味します。

+0

必要な順序は、行が挿入された逆の順序です。 "最初に挿入、最初に"。 – Steven

+1

@Steven:何を使うべきかを提案する前に、あなたのデータベースから 'DESCRIBE [ここのテーブル名]'の出力を提供する必要があります。あなたがオートナンバープライマリキーの列を持っているならば、それは 'ASC'で注文します。次の最も良いことは、datetimeデータ型を使用してdate_createdカラムになります。再び、「ASC」。 –

1

ORDER BY句に列名を指定できない場合は、DESCを使用することはできません。最後のいくつかのレコードを表示するにはLIMITというトリックに頼らざるを得ません。

これは不満足だと私は思います。

3

あなたは結果フィールドにカウンタを設定し、並べ替え、それを使用してすることができます

SELECT *, @counter := @counter + 1 AS 'counter' FROM tableName, (SELECT @counter := 0) r ORDER BY counter DESC 

私はあなたが望むようには動作すると思います。

+1

はい!できます !ありがとう!あなたはその質問に完全に答えました。 – Jerry

+0

@ジェリーしかし、これは行が取り出された順番の逆です。これは実装順序への保証された接続を持たず、特に何かを保証するものではありません。オーダーを保証したい場合は、データ内にある必要があります。 *また、*変数を設定して読み込むクエリに対しては保証がないため、このクエリには未定義の動作があります。 Perconaの5.7人の特定の最近のビルド*では、実装を見て、 'case'式の変数の特定の使用は、ある程度の予測可能な振る舞いを与えていることがわかりました。それまで。 – philipxy

関連する問題