Facebook风格的消息收件箱

时间:2012-01-15 20:21:38

标签: php sql

在facebook的消息之后创建消息传递系统模型。 消息收件箱是线程化的,但我的查询有问题,无法查看消息和线程中交换的其他消息。 db表看起来像这样。

消息

  • 中间
  • SEQ
  • created_on
  • CREATED_BY

messag_recips

  • 中间
  • SEQ
  • UID
  • 状态

注意:MID列是消息ID。将每条初始消息视为线程的开头。我没有拥有所有父/子的唯一消息ID,而是决定使用一个主线程(MID),然后在其中包含消息 - 这些消息都由SEQ(序列号)列定义。其余的是非常自我解释的。 created_by和所有后续用户标识将是数字ID,其可以指向其他地方的不同用户ID。最后要注意的是主键是基于MID和SEQ - 每个MID / SEQ永远不会有多个条目。 STATUS列 - 新的N为N,活动(或读取)为A,删除为D

这是我的查询

$sql = "select m.mid, m.seq, m.created_on, m.created_by, m.body, r.status from message_recips r
                inner join messages m on m.mid=r.mid and m.seq=r.seq
                where r.uid='$uid' and m.mid='$mid' and r.status in ('A', 'N')";

但它只返回发送给当前用户的消息,我希望它返回当前用户也发送的消息。我该如何修改查询?

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试将两条消息都发送给当前用户,以及当前用户发送的消息...... OR关系。

试试这个:

where (r.uid='$uid' OR m.created_by='$uid') and m.mid='$mid' and r.status in ('A', 'N')";