我正在构建基于mysql的聊天应用程序。只显示mysql中的唯一条目
我的数据库架构有如下表,
Users Messages
================= =================
id id
screen_name message
from
to
timestamp
的距离,并在信息表中的字段包含发送和接收的每封邮件的用户ID的。
我想显示用户($ id)和他们的朋友之一($朋友)之间的所有消息。我的查询如下:
$query = "SELECT messages.* , users.screen_name FROM users CROSS JOIN messages ";
$query .= "ON (messages.to = $id AND messages.from = $friend) ";
$query .= "OR (messages.to = $friend AND messages.from = $id)";
问题是每个消息在结果表中都是两次。
我试过使用DISTINCT,但它不是在这种情况下工作,或者我用它错了。
我的查询应该为了让两个用户之间的每条消息只有一次?
'GROUP BY messages.id'? – jensgram 2012-04-10 13:29:51
似乎是在做的伎俩。你能否简单地在答案中解释一下,以便我可以授予代表? – ppp 2012-04-10 13:32:02
您正在选择'messages。*'。使用'SELECT DISTINCT',如果这些字段中的任何一个不同(不管消息是否相同),那么你将得到两行。我建议你不要使用'SELECT *',而是明确地选择你实际需要的每个单独的字段。有关更多信息,请参见[本文](http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select)。 – Travesty3 2012-04-10 13:34:34