2012-01-17 60 views
3

我有两个用户之间的邮件存储的表称为注释和表的结构是这样的:集团消息通过最新回应

id | from_id | to_id | comment | date 

我要查询的数据只显示的最新消息两方。 我以前见过它。

我正在使用MYSQL。

回答

2

比方说,两个用户的身份证号码是12

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 OR from_id = 2) 
AND (to_id = 1 OR to_id = 2) 
ORDER BY date DESC 
LIMIT 1; 

如果你真的想成为迂腐,你可以添加这个where子句:

AND NOT (from_id = to_id) 

,以防止他们将消息发送给自己显示出来的情况。这假设用户甚至可以在系统中自己发送消息给他们。

+1

变化'TOP 1'为'LIMIT 1'为MySQL。 – 2012-01-17 00:47:08

+0

@ypercube好点。我也忘了分号。该死的MS SQL Server腐烂我的大脑。 – 2012-01-17 00:49:51

+0

如果我想查询所有关联的注释,只有1个ID不一定是两个,我该怎么办?并通过每个组的最新消息进行分组? – numerical25 2012-01-17 00:50:42

3

对于用户1:

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 2 AND to_id = 1) 
ORDER BY date DESC 
LIMIT 0,1; 

对于用户2:

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 AND to_id = 2) 
ORDER BY date DESC 
LIMIT 0,1; 

的“where”子句需要确保该消息被从双方之一发送到另一方,副相反,并且只显示给该用户的消息。

如果需要从任何两个显示最新的消息,这两个用户,那么:

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 OR from_id = 2) 
ORDER BY date DESC 
LIMIT 0,1; 
+0

是否可以选择仅由一个用户关联的所有最新消息,并按收到或发送的最后一个消息进行分组。例如Google电子邮件。 – numerical25 2012-01-17 01:11:21

+0

是的,只需删除“LIMIT 0,1”位,并通过您需要应用的任何用户过滤器进行过滤。 – ShaunOReilly 2012-01-17 01:32:42