2010-05-02 55 views
2

通常我會在自動增量上有一個稱爲ID的表字段。這樣,我可以使用這個領域等命令訂購沒有標識符的mysql結果

但是我無法控制表的結構,並想知道如何得到結果以相反的順序默認。

我目前使用

$q = mysql_query("SELECT * FROM ServerChat LIMIT 15"); 

但是就像我說的有沒有現場我可以訂購,所以是有沒有辦法告訴mysql扭轉它得到的結果的順序? I.e最後一行到第一行而不是默認行。

回答

5

MySQL支持按順序列位置排序:

SELECT * FROM ServerChat ORDER BY 1 DESC LIMIT 15 

但IIRC的ORDER BY這種用法在SQL標準過時。如果一些RDBMS供應商終止對它的支持,請不要感到驚訝。

通常,最好了解您的表格結構。

+0

這似乎工作了謝謝:D – Titan 2010-05-02 23:49:11

0

號,而無需現場訂貨也沒有辦法

0

你實際上得到您的結果在被稱爲「表順序」,這可能看起來像它在數據添加到訂單表,但該順序不穩定。有許多操作可以改變您接收結果的順序,而無需更改表格中的數據。

要重現您看到的順序,我建議在您的ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP類型的表中添加一列。這會給你一個專門訂購的欄目,因此會顛倒該訂單。如果這個操作是頻繁的,你應該在該列上添加一個索引。

+0

我有過的結構沒有控制一個表 – Titan 2010-05-02 23:47:59

0

根據this article,SQL-92允許用戶從「知名」視圖或稱爲INFORMATION_SCHEMA的表中查詢表結構信息。 MySQL 5.0及更高版本支持SQL-92。

例/摘錄:

SELECT table_name, column_name, is_nullable, data_type, character_maximum_length 
FROM INFORMATION_SCHEMA.Columns 
WHERE table_name = 'employees' 

所以,你可以使用列名的列表,讓用戶選擇其列它是由排列,然後用this SO answer弄清楚如何構建動態SQL,所以你正確執行查詢。

我還沒有用MySQL試過,但是這個方法對我來說肯定是有意義的。

0

您的表格必須指定一些唯一索引。它不必被命名爲ID,但它通常是必需的,可能是什麼決定了當前返回的訂單。它是什麼?不管是什麼,這是我的理解是,你應該能夠做一個ORDER BY ... DESC(或者,如果不工作,ASC)像上面例子的唯一標識hash

$q = mysql_query("SELECT * FROM ServerChat ORDER BY `hash` DESC LIMIT 15"); 
+0

我無法控制表的結構 – Titan 2010-05-02 23:47:26

+1

每個表都有結構。你不必控制它,只需知道它的樣子。 – buley 2010-05-02 23:51:45

+0

沒有列是一個唯一的標識符,也沒有一個可以用來排序的將它們放在任何正確的順序,因此我問。 – Titan 2010-05-04 10:06:39