2012-01-01 41 views
0

說我有如下表:mySQL查詢,按最近分組順序排序?

CREATE TABLE `table` (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
    userid INT UNSIGNED NOT NULL, 
    reference INT, 
    `datetime` DATETIME 
) Engine=InnoDB; 

我想從表中,組由DATE參考和順序選擇,同時也爲了利用最新的參考條目?

例如:

reference: 79 
datetime: 2011-12-31 00:32:30 

reference: 77 
datetime: 2011-12-31 00:40:30 

reference: 77 
datetime: 2011-12-31 00:43:30 

reference: 77 
datetime: 2011-12-31 00:45:30 

reference: 78 
datetime: 2011-12-31 00:47:30 

他們應該按此順序顯示:78 77(在○點45分之一),79

我現在有這是我的查詢:

SELECT * 
    FROM `table` 
    WHERE `userid` = '" . mysql_real_escape_string($id) . "' 
    GROUP BY `reference` 
    ORDER BY `datetime` DESC 

我怎樣才能使這個查詢工作?所以當已經存在的引用獲得另一個條目時,它會跳轉到列表的頂部?

謝謝

+0

該mysql擴展已過時,並在其棄用的方式。新代碼應該使用mysqli或PDO,它們都具有重要的優點,例如支持預處理語句。 – outis 2012-01-01 12:45:14

+2

可能的重複[在MySQL中選擇GROUP BY的最新行](http://stackoverflow.com/questions/5688063/),[查詢最近的條目與扭曲](http://stackoverflow.com/questions/4125515 /),[MySQL查詢,MAX()+ GROUP BY](http://stackoverflow.com/questions/5657446/),... – outis 2012-01-01 12:59:56

回答

3

嘗試

SELECT id, userid, reference, MAX(datetime) AS datetime 
FROM `table` WHERE `userid` = ID 
GROUP BY `reference` 
ORDER BY `datetime` DESC 
+0

完美,謝謝! – Latox 2012-01-01 12:48:07

0

需要近集團指定的所有列通過條款。

SELECT id, userid, reference, MAX(datetime) AS datetime 
FROM `table` WHERE `userid` = ID 
GROUP BY `id`, `userid`, `reference` 
ORDER BY `datetime` DESC 
+0

@johntotetwoo不在mySQL你不[看這裏](http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html) – xQbert 2012-01-01 13:00:45

+0

有沒有必要做這是因爲查詢僅針對一個用戶的行('WHERE userid = ID') – piotrekkr 2012-01-01 13:01:10