2012-03-05 24 views
0

我想通過最近登錄的方式對mysql進行排序,但每次登錄時我都要求助,如何排序並保存最新的登錄信息?如何排序mysql

+1

爲什麼你需要物理地度假表? 'SELECT blah FROM table ORDER BY name'會足夠嗎? – Ryan 2012-03-05 18:33:21

+0

@Melissa因爲我想排序它最新登錄... – Lukus 2012-03-05 18:36:30

+0

我需要了解什麼是問題,試圖幫助你。你可以選擇他們排序? ... – 2012-03-05 18:36:45

回答

0

您不能可靠地保存MySQL中按字母順序存儲的值。您所能做的最好的是在您的SELECT查詢中使用ORDER BY子句。

0

通常你通過添加一個「ORDER BY」子句進行選擇。你爲什麼關心它們實際存儲在表中的順序?

如果你真的在乎,我想你可以做一個INSERT ... SELECT在排序列的同時將它複製到一個新表中,但是無論何時添加一條新記錄,它都會在列表的末尾結束。

0

SQL不能這樣工作。它不像電子表格那樣,行是爲了「按原樣」讀取的,您可以將它們按照某種有意義的順序排列。你所做的任何事情都不會改變SQL存儲行的順序.SQL通過查詢爲你提供數據,查詢以什麼順序告訴它你想查看哪些行。

因此,您必須在每次希望以特定順序查看數據時重用「order by」子句。但是,您不應該需要手動查詢SQL。如果您正在編寫任何類型的腳本或應用程序來處理它,您只需編寫一次查詢,並在每次需要數據時重新運行它。

0

爲了讓您的用戶表的最後一次登錄,您可以使用查詢像

SELECT user_name, login_datetime 
FROM user_table 
ORDER BY login_datetime DESC 
LIMIT 1 

假設user_name是你正在尋找和login_datetime是你可以訂購一個時間戳字段。 LIMIT 1將只顯示最高的結果,並可根據您的需要進行更改。

0

使用MySQL的InnoDB引擎,您的行根據主鍵進行物理排序。因此,如果主鍵位於login列,則行將按照login中的值保持物理順序。

主鍵的要求是每個值必須是唯一的,並且不允許NULL。因此,您可以考慮將login列作爲主鍵。如果login是日期時間列,則最新的登錄日期時間值將始終位於表的末尾。

許多人使用自動增量整數列作爲主鍵。在這種情況下,要插入的最後一條記錄始終位於表格的末尾。

在某些情況下,您必須知道讓某些行按照物理順序(通過特定列)的價值,否則您不會問。

例如,執行下列SELECT返回按物理順序的行(與主鍵),而不必指定一個列訂購由所述結果,並且不強制MySQL來稍後再點結果集:

SELECT * 
FROM test 

但是,如果您需要按主鍵以外的順序排列結果,則應該使用ORDER BY子句。例如,如果該行被列name物理排序的,但要通過login結果,以便返回時,你會發出以下查詢:

SELECT * 
FROM test 
ORDER BY login ASC 

上面的查詢請求的MySQL命令根據行指定的列。您在ORDER BY子句中指定ASC以升序排列值,DESC以降序排列。