Php 打印表中的记录,但不打印副本
好吧,我不知道如何简短地把它作为一个问题,所以很抱歉,它的措辞不太好。我在其他任何地方都找不到答案(可能是因为我无法正确表达我的问题)Php 打印表中的记录,但不打印副本,php,mysql,database,inbox,Php,Mysql,Database,Inbox,好吧,我不知道如何简短地把它作为一个问题,所以很抱歉,它的措辞不太好。我在其他任何地方都找不到答案(可能是因为我无法正确表达我的问题) 这就是我的问题:我在我的网站上安装了一个收件箱/发件箱系统,我想做的是列出向该用户发送消息的人的姓名,但我想不出任何方法来这样做,它会在messages表中搜索,并且每个用户名只选择一条记录,如果不够清楚,很抱歉,如果需要,很乐意进一步扩展。最好是创建一个新表,该表将表示“之前已向我(或彼此)发送消息” 您基本上需要一个用户id的多对多关系表来表示这一点 创建一
这就是我的问题:我在我的网站上安装了一个收件箱/发件箱系统,我想做的是列出向该用户发送消息的人的姓名,但我想不出任何方法来这样做,它会在messages表中搜索,并且每个用户名只选择一条记录,如果不够清楚,很抱歉,如果需要,很乐意进一步扩展。最好是创建一个新表,该表将表示“之前已向我(或彼此)发送消息” 您基本上需要一个用户id的多对多关系表来表示这一点
创建一个包含两列SenderId和ReceiverId的HasMessaged表。然后,您可以通过此表将用户加入到自身中,对于任何单个用户,创建一个已向其发送消息的所有人的列表。最初需要在messages表上运行一次昂贵的查询来填充该表,但这应该不会太糟糕。一旦填充该表ted您可以通过执行简单的INSERT…ON DUPLICATE KEY update来更新它,以确保表中包含正确的记录。如果您提供了一些代码和结构,这将非常有用 我假设你有一张这样的桌子:
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!
然后输入数据,如下所示:
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条消息,但她的名字只出现了一次。类似于从消息中选择不同的用户…?如果没有代码或db架构,很难回答。如果我的答案有帮助,请投票或接受。如果没有,请在下面评论,我将修改和改进我的答案。