2013-02-25 70 views
0

我有一個郵件圖標,點擊打開一個類似facebook的郵件divdiv自動滾動到底部。在這div,我得到了最後25條消息。問題是我想要從最新的div底部訂購消息。我有兩個順序列:ID這是自動增量和dt這是一個日期時間。sql訂單在郵件格式

我試過ORDER BY的每一個組合,我無法得到它。

SELECT TOP 25 
    rec, 
    sender, 
    message, 
    CONVERT(varchar(20),dt,120) AS date 
FROM dbo.messages 
WHERE (rec='$user[name]' OR sender='$user[name]') 
ORDER BY id DESC, dt ASC 

沒有底線,但SELECT BOTTOM 25 * ORDER BY id理論上會工作完美。

回答

0

您應該可以按日期時間列(降序)進行排序,然後拉出頂端25.我修改了您的查詢。

SELECT TOP 25 
rec, sender, message, CONVERT(varchar(20),dt,120) AS date 
FROM dbo.messages 
WHERE (rec='$user[name]' OR sender='$user[name]') 
ORDER BY dt DESC 
+0

檢索過去的25倍的結果,但問題是,當我遍歷,最新的消息顯示在頂部,因爲它是第一個結果,並朝着用於回答的輸入框顯示查詢的最後結果。我需要最後25條記錄,由ID/DT ASC訂購。 – user1695981 2013-02-25 13:10:18

+0

那麼,爲什麼你不處理翻轉應用程序層的順序呢?這似乎是一個顯示問題而不是查詢問題。這並不是說SQL Server無法處理它,只是您的應用程序可以更好/更快地處理它。 – Matt 2013-02-25 13:22:01

+0

你假設你的ID和你的日期時間總是按照正確的順序。他們不一定是。即使按日期接收數據DESC,然後翻轉應該允許正確的順序,而不是依賴任意的ID字段。 – Matt 2013-02-25 13:28:25

0

爲了得到SELECT BOTTOM 25 * ORDER BY id(即; TOP 25 ORDER BY id DESC

;with cte as (
    select top 25 
     id, 
     rec, 
     sender, 
     message, 
     dt 
    from dbo.messages 
    where (rec='$user[name]' OR sender='$user[name]') 
    order by id desc 
) 
select rec, sender, message, convert(varchar(20),dt,120) date 
from cte 
order by id,dt -- as required here