2010-06-17 55 views
2

我最近發佈了一個關於以正確順序在表中獲取最後3個結果的問題。我現在想要按照正確的順序,除了最後3個以外的所有評論。mysql - 抵消問題

這是我的語法;

SELECT * 
FROM (SELECT * 
     FROM $table 
     ORDER BY ID DESC 
     OFFSET 3) AS T 
ORDER BY TIME_STAMP 

我收到的錯誤是:

您的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以在第一行使用'OFFSET,3'附近使用的正確語法)AS T ORDER BY TIME_STAMP'at line 1

我似乎無法得到它的工作。任何幫助非常感謝。

回答

8

按照MySQL Documentation

檢索所有行從某個 偏移到最後的結果 集合中,可以使用一些大數目作爲 的第二個參數。這種說法 檢索的所有行第96列 到最後:

他們建議您使用的查詢,如:

SELECT * FROM tbl LIMIT 95,18446744073709551615; 

所以你的情況,你應該嘗試:

SELECT * 
FROM (SELECT * 
     FROM $table 
     ORDER BY ID DESC 
     LIMIT 3,18446744073709551615) AS T 
ORDER BY TIME_STAMP 

請注意,您也可以使用PostgreSQL兼容版本使用關鍵字OFFSET

SELECT * 
FROM (SELECT * 
     FROM $table 
     ORDER BY ID DESC 
     LIMIT 18446744073709551615 OFFSET 3) AS T 
ORDER BY TIME_STAMP 

以防萬一你想知道,18446744073709551615 = 2^64 - 1

+0

我認爲OP正在尋找相反的東西。獲取除最後3個以外的所有記錄。 – 2010-06-17 07:30:11

+0

@Daniel:這就是本聲明所做的。它跳過前3個並返回其餘部分。 – Senseful 2010-06-17 07:30:55

+0

這是一個很好的解釋,謝謝! – 2010-06-17 07:31:43

4

如果沒有限制,您不能使用OFFSET。

有點笨重,但該查詢爲我工作,而不是工作沒有一個多餘的內部子查詢(MySQL的5.0.90)

select * from $table 
where id not in (
    select id from (
    select id from languages order by id DESC LIMIT 3 
) l1 
) order by time_stamp