MySQL和PHP中的线程消息传递问题

时间:2011-04-11 04:14:27

标签: php mysql messaging

感谢您帮助我。

我正在使用MySQL和PHP创建一个线程消息传递系统,并以XML格式返回结果。我正在寻找创建一个系统,以类似于iPhone SMS系统的方式线程化消息 - 用户之间只有1个线程,最新内容的线程出现在顶部(无论最后一条消息是否被发送或收到)。

我的简单想法是创建一个名为“threads”的基页,这是收件箱中的内容。我想在这里拉出所有不同的线程(以及发送或接收的最后一条消息)。当您单击一个线程时,我将在数据库中查询这些用户之间的所有消息/回复。

我的数据库结构:

消息:id | senderid |收件人|身体|时间

我有一个很大的问题/问题:

  1. 我无法直接查询recipientid = myid,因为用户本来可以发送邮件但从未收到过回复,而在该用例中,未答复的邮件仍应按照时间顺序出现在“收件箱”。但是,如果我选择senderid = myid或recipientid = myid的邮件,我会得到两个线程,因为查询会在同一个用户之间遇到发送和接收的消息。如何返回两个用户之间的第一个唯一通信 - 而不是第一个唯一收到的消息和第一个唯一发送的消息?

  2. 我使用LEFT JOIN将messages表连接到users表,该表具有用户名。我只是他们在messages.senderid = users.name。这适用于当前用户是最后一个接收消息的线程。但是对于某些线程,当前用户发送了唯一/最后一条消息的线程 - 上面的LEFT JOIN将返回当前用户名,而不是他发送消息的用户名。如何动态编写类似“if($ userid == senderid){LEFT JOIN users ON users.id = messages.recipientid;} else {LEFT JOIN users ON users.id = senderid}?

  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

也许是这样的?

WHERE
  (senderid = $otheruser
   AND recipientid = $currentuser)
  OR
  (senderid = $currentuser
   AND recipientid = $otheruser)