【问题标题】:Ajax chat system - use query to select twice from a tableAjax 聊天系统 - 使用查询从表中选择两次
【发布时间】:2014-02-12 14:31:14
【问题描述】:

我正在尝试构建一个 ajax 聊天系统。基本上我有 2 个表,users 表和 pm(私人消息传递)表。我正在加入这些表格。

如何在一个查询中从用户表中获取人员 1 和人员 2(接收者和发送者)的所有信息,以便我可以在正确的时间订购所有聊天?

我尝试使用普通连接来完成此操作,但我意识到它只发送用户表中的一组数据。同一张表可以加入两次吗?

我试过这个:

SELECT pm.id, pm.message, pm.reciever, pm.sender, pm.senttime, pm.rread, 
u.username, u.name, u.surname, u.fullname, u.profile, u2.username, u2.name, 
u2.surname, u2.fullname, u2.profile 
FROM pm, users u, users u2
WHERE (pm.reciever = 1 AND pm.sender = 2) OR (pm.reciever = 2 AND pm.sender = 1)

但它返回倍数。

【问题讨论】:

  • 您能详细介绍一下您的聊天系统吗?是两个用户之间的聊天,还是一般的聊天? pm 表是如何链接到用户的?
  • 您是否使用while循环来显示消息?我对您在做什么感到困惑,至于返回正确的时间,给每个新条目一个唯一的 ID,该 ID 随着每个新条目自动递增,然后 ORDER BY id ASC
  • 我正在使用 PDO 来获取结果,然后使用 foreach 将信息获取到 XML 中,以便我可以通过 AJAX 加载

标签: php mysql sql ajax


【解决方案1】:

您必须比较不同表格中的 id:

SELECT pm.id, pm.message, pm.reciever, pm.sender, pm.senttime, pm.rread, s.username, s.name, s.surname, s.fullname, s.profile, r.username, r.name, r.surname, r.fullname, r.profile 
FROM pm, users s, users r
WHERE (r.id = pm.reciever) AND (s.id = pm.sender) AND ((r.id = 1 AND s.id = 2) OR (r.id = 2 AND s.id = 1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2019-07-06
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    相关资源
    最近更新 更多