2014-10-27 92 views
1

我有一張表,其中包含用戶ID,高分和時間戳。mysql/php,按用戶ID分組,按時間排序

我想按時間戳排序,以便最新的條目位於頂部,並且不要在列表中顯示任何用戶ID兩次,因此需要對它們進行分組。

我還需要它按分數排序。

$sql="SELECT * FROM $table GROUP BY userID ORDER BY time DESC"; 

$ sql2 =「SELECT * FROM $ table GROUP BY userID ORDER BY score DESC」;

此時,我看到Group by是先完成的,所以我可能只是得到一些隨機時間戳/郵票。我需要先訂購它們,然後將它們分組。但是,如果我切換Group by和Order by,則會出現錯誤。

有人能幫我一下嗎?謝謝。

+0

的可能重複的[SQL多列排序(http://stackoverflow.com/questions/2051162/sql-multiple-column-ordering) – 2014-10-27 20:33:12

回答

1

GROUP ing始終在ORDER之前完成。要訂購分組之前的記錄,有2種方法:

  1. ORDER BY子查詢,然後應用GROUP BY。這通常不是一種更好的方法,因爲運行子查詢非常昂貴,特別是如果您有很多記錄。對於少量的記錄,這將會很好。

    $sql="SELECT * FROM (SELECT * FROM $table ORDER BY time DESC) GROUP BY userID";

  2. 更好的解決方案,就是以一個子查詢的MAX(time),然後加入,爲你的餐桌上都userID和最大時間。

    SELECT p1.* FROM $table t1 INNER JOIN ( SELECT max(time) MaxTime, userID FROM $table GROUP BY userID ) t2 ON t1.userID = t2.userID AND t1.time = t2.MaxTime order by t1.time DESC;

我已經從我的頭頂寫他們。

HTH