gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:51:38 25 4
gpt4 key购买 nike

感谢您帮助我。

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

我的简单想法是有一个名为“threads”的基本页面,它是收件箱的一部分。我想在这里提取所有不同的线程(以及发送或接收的最后一条消息)。当您单击某个线程时,我会在数据库中查询这些用户之间的所有消息/回复。

我的数据库结构:

消息:id |发送ID |收件人| body |时间

我有一个巨大的疑问/问题:

  1. 我无法在receiverid=myid 的情况下进行直接查询,因为用户可能已发送消息但从未收到回复,并且在该用例中,未答复的消息仍应显示在(按时间顺序) “收件箱”。但是,如果我选择 senderid=myid 或receiverid=myid 的消息,当查询遇到相同两个用户之间发送和接收的消息时,我会得到两个线程。如何返回两个用户之间的第一个唯一通信 - 而不是第一个唯一收到的消息和第一个唯一发送的消息?

  2. 我使用 LEFT JOIN 将消息表连接到包含用户名的用户表。我只是将它们放在 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}?

谢谢!

最佳答案

也许是这样的?

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

关于php - MySQL 和 PHP 中的线程消息传递问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com