通常我會在自動增量上有一個稱爲ID的表字段。這樣,我可以使用這個領域等命令訂購沒有標識符的mysql結果
但是我無法控制表的結構,並想知道如何得到結果以相反的順序默認。
我目前使用
$q = mysql_query("SELECT * FROM ServerChat LIMIT 15");
但是就像我說的有沒有現場我可以訂購,所以是有沒有辦法告訴mysql扭轉它得到的結果的順序? I.e最後一行到第一行而不是默認行。
通常我會在自動增量上有一個稱爲ID的表字段。這樣,我可以使用這個領域等命令訂購沒有標識符的mysql結果
但是我無法控制表的結構,並想知道如何得到結果以相反的順序默認。
我目前使用
$q = mysql_query("SELECT * FROM ServerChat LIMIT 15");
但是就像我說的有沒有現場我可以訂購,所以是有沒有辦法告訴mysql扭轉它得到的結果的順序? I.e最後一行到第一行而不是默認行。
MySQL支持按順序列位置排序:
SELECT * FROM ServerChat ORDER BY 1 DESC LIMIT 15
但IIRC的ORDER BY
這種用法在SQL標準過時。如果一些RDBMS供應商終止對它的支持,請不要感到驚訝。
通常,最好了解您的表格結構。
號,而無需現場訂貨也沒有辦法
你實際上得到您的結果在被稱爲「表順序」,這可能看起來像它在數據添加到訂單表,但該順序不穩定。有許多操作可以改變您接收結果的順序,而無需更改表格中的數據。
要重現您看到的順序,我建議在您的ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
類型的表中添加一列。這會給你一個專門訂購的欄目,因此會顛倒該訂單。如果這個操作是頻繁的,你應該在該列上添加一個索引。
我有過的結構沒有控制一個表 – Titan 2010-05-02 23:47:59
根據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試過,但是這個方法對我來說肯定是有意義的。
您的表格必須指定一些唯一索引。它不必被命名爲ID,但它通常是必需的,可能是什麼決定了當前返回的訂單。它是什麼?不管是什麼,這是我的理解是,你應該能夠做一個ORDER BY ... DESC
(或者,如果不工作,ASC
)像上面例子的唯一標識hash
:
$q = mysql_query("SELECT * FROM ServerChat ORDER BY `hash` DESC LIMIT 15");
這似乎工作了謝謝:D – Titan 2010-05-02 23:49:11