从表中打印记录但不打印重复记录

时间:2013-04-02 23:32:50

标签: php mysql database inbox

好吧,我不确定如何在短期内将其作为一个问题,所以很抱歉,措辞并不好。我无法在其他任何地方找到答案(可能是因为我无法正确说出我的问题)

这是我的问题:我在我的网站上实现了一个收件箱/发件箱系统,我想要做的是有一个向该用户发送消息的人的名单,但我想不出任何办法要做到这一点,它将遍历消息表,并且只用每个用户名选择一条记录,对不起,如果不够清楚,很高兴在需要时进一步扩展..

2 个答案:

答案 0 :(得分:1)

如果你提供了一些代码,那将会很有帮助。你所拥有的结构。

我假设你有这样一张桌子:

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!

现在您想知道,谁向Joe发送了一条消息。这是SQL:

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

该SQL的结果将是:

  Sender
  Jane
  Meg

即使Jane发送了Joe 2消息,她的名字也只出现一次。

答案 1 :(得分:0)

最好的方法是创建一个新表,表示'之前已向我(或彼此?)发送了一条消息“

您基本上需要用户ID的多对多关系表来表示这一点。

创建一个表HasMessaged,包含两列SenderId和ReceiverId。然后,您可以通过此表将用户加入到自身,并且对于任何单个用户,都可以创建已向其发送消息的每个人的列表。最初需要通过在消息表上运行一次昂贵的查询来填充该表,但这不应该太糟糕。填充后,您可以通过执行简单的INSERT ... ON DUPLICATE KEY UPDATE来更新它,以确保该表包含正确的记录。