2009-11-27 25 views
5

在Mysql中,當您執行選擇SQL語句時,如果不包含排序子句,會有默認排序,如何反轉默認排序?只需添加DESC如何顛倒Mysql中的默認排序?

+0

Duplicate:http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order/1793162#1793162 – 2009-11-27 06:34:21

+0

有沒有這樣的事情作爲「默認排序」所以你不能「反轉」它。 – 2014-03-17 17:32:05

回答

3

如果您沒有指定ORDER BY子句,那麼沒有保證的順序,因此'默認順序的逆向'是未定義的。

+0

對於那些喜歡用證據來回答所提出的索賠的答案:https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries – Patrick 2017-06-26 00:47:23

1

我認爲你可以通過指定實際需要的順序來更好地服務。表格本身就沒有順序。它可能只是按插入行的順序顯示 - 儘管不能保證它會保持這個順序。

有機會,你可能只是想補充一點:

ORDER BY id DESC 

...因爲大部分的時間,如果你想在人用所謂的「身份證」

+0

但是,真可惜,表中沒有「Id」字段。 – Steven 2009-11-27 06:29:07

+0

但是,如果沒有Id字段或等價物,那麼訂單是否有意義? – pavium 2009-11-27 06:31:35

+0

我認爲插入行的默認順序是,默認順序是「先插入,後出」。我想將它改爲「先插入,先出」。 – Steven 2009-11-27 06:40:32

5

的自動遞增的字段數據一直排列出來,您必須使用ORDER BY,然後再使用您要排序查詢的列。 ASC是默認值,所以您不需要指定它。 IE:

ORDER BY your_column 

...是等效於:

ORDER BY your_column ASC 

ASC/DESC是在每列的基礎。例如:

ORDER BY first_column, second_column DESC 

...意味着查詢將按降序按升序使用first_columnsecond_column排序結果集,作爲一個組合。

+0

我需要的順序是插入行的相反順序。 「先插入,先出」。 – Steven 2009-11-27 06:42:22

+1

@Steven:在我建議使用什麼之前,您必須從數據庫中提供'DESCRIBE [您的表名稱]的輸出。如果您有一個自動編號主鍵列 - 按順序「ASC」。接下來最好的事情是使用datetime數據類型的date_created列。再次,'ASC'。 – 2009-11-27 06:51:15

1

除非您可以在ORDER BY子句中指定列名稱,否則不能使用DESC,並且您必須訴諸涉及LIMIT的技巧來查看最後幾條記錄。

我覺得這樣做會讓人不滿意。

3

您可以在結果字段設置一個計數器和排序使用它:

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

我認爲它會工作,只要你想。

+1

是的!有用 !謝謝 !你對這個問題的回答很完美。 – Jerry 2016-08-13 13:18:12

+0

@Jerry但是,這與行被檢索到的順序恰恰相反,它與實現順序沒有任何保證連接,而這又不能保證是特別的任何事情。如果你想保證訂單,它必須在數據中。 *另外*對於既設置和讀取變量的查詢也沒有保證,因此此查詢具有未定義的行爲。 *對於最近在Percona的5.7人的某個版本*來說,他看到了這個實現,發現'case'表達式中的某些變量的使用(*不是這樣)會給出一定的可預測行爲。直到。 – philipxy 2017-10-21 08:56:43