2013-10-29 129 views
1

我嘗試了很多來自這裏的解決方案,但沒有一個解決了我的問題!我有以下表結構:按日期排序的活動流MYSQL

|Column|Type| 
|------ 
|activity_id| int(10) PRIMARY 
|user_id| int(10) 
|type| varchar(255) 
|activity| varchar(255) 
|item_id| int(11) 
|secundary_id| int(11) 
|date| datetime 

我建立的活動流,在該表中,我會像記錄

「約翰(USER_ID)評論(活動)後(類型=> ITEM_ID )6小時前(日期)」

我打算做以下結構:

‘約翰,瑪麗和+2評論過的4小時前’

到目前爲止,我能夠做的這個連接,但我不能成功地按日期排序記錄。我在自己的表中嘗試了一些內部聯接,但是由於我無法檢索未按(type,activity,item_id)分組的其他活動類型,例如:

「John(user_id)posted活動)一個帖子(type => item_id)5小時前(日期)「

當我使用JOINS我只得到按記錄分組。這是我的實際查詢:

SELECT t.*, GROUP_CONCAT(DISTINCT user_id) AS users FROM (
SELECT * 
FROM activity 
    ORDER BY date DESC 
)t 
GROUP BY type, activity, item_id 
ORDER BY date DESC 

我已經嘗試過在這裏列出了一些解決方案:Select the 3 most recent records where the values of one column are distinct 但是,當我加入的表,我失去了非分組的記錄! 有沒有人有另一種想法?現在感謝!

/**編輯 - 結果

activity_id  user_id  type activity item_id  secundary_id date users 
865   32 update comment  20 22 2013-10-29 15:03:49  32,34 
858   36 update post 20 NULL 2013-10-29 13:50:59  36 
864   32 post comment  2615 21 2013-10-29 14:55:58  32,34,36 
856   36 post comment  2616 14 2013-10-29 13:50:10  36,39,34,32 
872   32 post comment  2617 28 2013-10-29 15:46:20  32 
852   34 post post 2615 NULL 2013-10-29 13:47:25  34 
854   32 post post 2616 NULL 2013-10-29 13:49:13  32 
870   32 post post 2617 NULL 2013-10-29 15:36:57  32 

,這就是我與查詢得到以上,但例如ITEM_ID 2616有4個用戶評論,不是由最後一個用戶評論日期排序,例如我有如下記載:

activity_id user_id type activity item_id secundary_item date 
856  36 post comentar 2616 14 2013-10-29 14:05:10 

他的日期是14:05,但我選擇我要找到另一箇舊的評論日期!

- FIDDLE

http://sqlfiddle.com/#!2/1923d2/1


如果你想獲得最新的日期由@湯姆

+0

這有點難以理解。你能發佈一些樣本數據,你得到的結果和你想得到的結果嗎? – Tom

+0

當然! 1秒.. – wiLLiamcastrO

+0

@Tom更新! – wiLLiamcastrO

回答

3

解決,試試這個:

ORIGINAL

SELECT activity_id, user_id, type, activity, item_id, secundary_id, MAX(date) date, 
     GROUP_CONCAT(DISTINCT user_id) AS users 
FROM  activity 
GROUP BY type, activity, item_id 
ORDER BY date DESC 

EDITED - 下面會給出每個分組的最新記錄。

SELECT activity_id, user_id, type, activity, item_id, secundary_id, date, 
     users 

FROM  activity a 

     JOIN (SELECT MAX(activity_id) max_activity_id, 
         GROUP_CONCAT(DISTINCT user_id) AS users 
       FROM  activity 
       GROUP BY type, activity, item_id 
      ) AS grp ON a.activity_id = grp.max_activity_id 

GROUP BY date DESC 
+0

我會盡力的!我用我的結構構建這個小提琴:http://sqlfiddle.com/#!2/1923d2/1 – wiLLiamcastrO

+0

那列出了正確的活動記錄,但我仍然在我顯示時發出一些較老的評論(secundary_id)!我的意思是活動的順序是寫,但不是評論等! – wiLLiamcastrO

+0

好的,對於每個組,您想要顯示最近記錄中的值? – Tom