Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 打印表中的记录,但不打印副本_Php_Mysql_Database_Inbox - Fatal编程技术网

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架构,很难回答。如果我的答案有帮助,请投票或接受。如果没有,请在下面评论,我将修改和改进我的答案。