2

好的,我不知道如何简短地把它作为一个问题来表达,所以很抱歉它的措辞不是很好。我在其他任何地方都找不到答案(可能是因为我无法正确说出我的问题)

这是我的问题:我在我的网站中实现了一个收件箱/发件箱系统,我想做的是列出向该用户发送消息的人员的姓名列表,但我想不出任何方法来做到这一点它将在消息表中搜索,并且每个用户名只选择一个记录,如果不够清楚,很抱歉,如果需要,很乐意进一步扩展..

4

2 回答 2

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!

现在你想知道,谁给乔发了消息。这是SQL:

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

该 SQL 的结果将是:

  Sender
  Jane
  Meg

尽管 Jane 向 Joe 发送了 2 条消息,但她的名字只出现了一次。

于 2013-04-08T15:19:22.917 回答
0

最好的办法是可能创建一个新表来表示“之前已向我(或彼此?)发送过消息”

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

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

于 2013-04-02T23:52:27.073 回答