2010-11-08 51 views
3

我有三个表组之前发生的顺序,我会就在这里显示出相关的列的MySQL获得由

表:组列:GROUP_ID,名称。

表:groups_to_message色谱柱: GROUP_ID,MESSAGE_ID

表:消息色谱柱:MESSAGE_ID, 创建(日期)

我需要基本上找到每个组的最后一个消息,以进行显示重复的组。

我使用GROUP BY试过这样:

SELECT m.created, g.group_id 
FROM groupss as g 
JOIN group_to_message as gm ON (g.group_id = gm.group_id) 
JOIN messages as m 
GROUP BY g.group_id 
ORDER BY m.created DESC 

这将导致成功的分组,但ORDER BY所以第一个结果排序之前,在作出决定之前完成。

任何帮助表示赞赏。

+0

消息可以属于多个组在你的模型中? – Quassnoi 2010-11-08 16:38:09

+1

你有没有发现这方面的解决方案? – Ajinkya 2013-07-30 11:58:21

回答

0
SELECT m.created, g.group_id 
FROM groupss g 
JOIN messages m 
ON  m.id = 
     (
     SELECT mi.id 
     FROM group_to_message gm 
     JOIN message mi 
     ON  mi.message_id = gm.message_id 
     WHERE gm.group_id = g.group_id 
     ORDER BY 
       gm.group_id DESC, mi.created DESC 
     LIMIT 1 
     ) 
3

如果我正在阅读您的问题,请使用MAX()。这应该让你最近的项目为每个组

例...

SELECT MAX(m.created), g.group_id 
FROM groupss as g 
JOIN group_to_message as gm ON (g.group_id = gm.group_id) 
JOIN messages as m ON (gm.message_id = gm.message_id) 
GROUP BY g.group_id 
ORDER BY m.created DESC 
+0

这给出了每个组的相同日期,即表中的最大日期 – wiggles 2010-11-08 16:49:51

0

这是未经测试,但它应该工作:

SELECT m.created, g.group_id 
FROM groups as g 
JOIN group_to_message as gm ON (g.group_id = gm.group_id) 
JOIN messages as m ON (gm.message_id = m.id) 
GROUP BY g.group_id HAVING m.created = MAX(m.created)