好吧,我不确定如何在短期内将其作为一个问题,所以很抱歉,措辞并不好。我无法在其他任何地方找到答案(可能是因为我无法正确说出我的问题)
这是我的问题:我在我的网站上实现了一个收件箱/发件箱系统,我想要做的是有一个向该用户发送消息的人的名单,但我想不出任何办法要做到这一点,它将遍历消息表,并且只用每个用户名选择一条记录,对不起,如果不够清楚,很高兴在需要时进一步扩展..
答案 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来更新它,以确保该表包含正确的记录。