2013-04-02 115 views
2

好吧,我不确定如何将它简短地作为一个问题说出来,所以对不起,它措辞不妙。我无法在其他地方找到答案(可能是因为我无法正确回答我的问题)从表中打印记录但不打印重复记录

这是我的问题:我的收件箱/发件箱系统已实施到我的网站中,我想要do有一个已经给这个用户发送了一条消息的人的名字列表,但是我想不出有什么办法可以在这个地方浏览消息表,并且只用一个用户名选择一条记录,不够清晰,高兴,如果需要进一步扩大..

谢谢..

+2

就像SELECT DISTINCT user FROM message ....?如果没有一些代码或数据库模式,很难回答。 –

回答

0

最好最好是可能创建一个新表,将代表着“发了一个信息给我(或对方?)之前“

您基本上需要一个用户标识的多对多关系表来表示这个。

创建一个表HasMessaged,具有两列SenderId和ReceiverId。然后,您可以通过此表将任何用户加入自己,并为任何单个用户创建一个列出每个人的消息。该表最初需要通过在消息表上运行一次昂贵的查询来填充,但它不应该太糟糕。填充完成后,您可以通过执行简单的INSERT ... ON DUPLICATE KEY UPDATE来更新它,以确保表中包含正确的记录。

0

这将是有益的,如果你提供了一些代码&你有什么结构。

我假设你有一个表是这样的:

CREATE TABLE `messages` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`sender` VARCHAR (50) NOT NULL , 
`receiver` VARCHAR (50) NOT NULL , 
`dateSent` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
`contents` TEXT NOT NULL) 

和输入数据,这样的事情:

id sender receiver dateSent contents 
1 Joe  Jane 4/8/2013 9:15 How are you? 
2 Jane Joe  4/8/2013 9:22 Fine 
3 Joe  Jane 4/8/2013 9:27 Can you help me with MySQL? 
4 Jane Joe  4/8/2013 9:31 Sorry. Ask Meg. 
5 Joe  Meg  4/8/2013 9:38 Can you help me with MySQL? 
8 Meg  Joe  4/8/2013 9:45 Sure! 

现在你想知道,谁传话给乔。下面是SQL:

SELECT `sender` FROM `messages` 
WHERE `receiver` = "Joe" 
GROUP BY `sender` 

是SQL的结果将是:

Sender 
    Jane 
    Meg 

即使简派乔2级的消息,她的名字只出现一次。

+0

如果我的回答有帮助,请注册或接受它。如果没有,请在下面评论,我会修改并改进我的答案。 – Marjeta