2011-04-19 103 views
1

下面的代碼工作,但我想組顯示日期時間由他們最新的查詢不是第一個日期時間查詢。我試着改變ASC/DESC中的ORDER BY,但這只是改變了所有組的順序,而不是組內的數據。我需要所有組和所有組的內部數據以最新的日期時間排序。GROUP BY ORDER BY幫助

$query="SELECT * FROM emails 
     WHERE sentto='$sid' 
     GROUP BY sentto 
     ORDER BY datetime DESC LIMIT $eu, $limit "; 

而不是將其顯示組,第一個查詢命令他們:從山姆·理查茲在2011年1月22日
消息(這是一組),從約翰·史密斯1月5日
消息, 2011
(這是一組)

我想讓它顯示的最新查詢組,責令:上從約翰·史密斯
消息2011年4月19日
(TH是是一組)由山姆·理查茲
消息上2011年3月10日(這是一組)

請幫助。

回答

2

我覺得你的問題的一部分是,你是選擇一組,通過查詢非集合列。你應該清楚你想讓它在合計查詢結果中返回哪些值。

SELECT sentto, MAX(datetime) AS datetime FROM emails 
    GROUP BY sentto 
    ORDER BY datetime desc LIMIT $eu, $limit; 

我還不確定這會給你你想要的。這聽起來像你想實際檢索每個單獨的電子郵件的行,並最大限度地使用GROUP BY排序。爲此,您可能需要執行上述查詢,然後返回併爲每個sentto執行第二個查詢。我想不出一種方法來在單個查詢中做到這一點。

SELECT * FROM emails 
    WHERE sentto=$sid 
    ORDER BY datetime DESC; 

(對於每個sentto在第一個查詢返回。)

+0

這幾乎工作。我正在調整一些東西,試圖弄明白。我幾乎用一個查詢來釘住它。 – yanike 2011-04-19 20:53:46

0

要將數據與組您所需要的ORDER BY子句中包括sentto排序。

試試這個:

SELECT * FROM emails 
      WHERE sentto='$sid' 
      GROUP BY sentto 
      ORDER BY sentto, datetime DESC LIMIT $eu, $limit 
+0

仍然沒有奏效。它對組進行排序,但仍將組的第一項顯示爲最早的消息。 – yanike 2011-04-19 20:26:50

1

如何:

ORDER BY sentto ASC, datetime DESC 
+0

仍未顯示組主要的最新日期時間消息。 – yanike 2011-04-19 20:24:39

+0

仍然沒有工作。它對組進行排序,但仍將組的第一項顯示爲最早的消息。 – yanike 2011-04-19 20:31:59

+0

是的,重新閱讀我並不完全確定我瞭解數據行是如何與所需輸出進行比較的(您提到查看組的內部數據,但分組的目的是'摺疊'滿足條件轉換爲單行,所以除了集合函數(如MAX或SUM)之外,您不能看到數據。我認爲布賴恩的回答看起來更好地滿足您的需求。 – 2011-04-19 20:51:16