2012-01-15 90 views
0

我正在Facebook的消息之后创建一个消息系统模型。 邮件收件箱是线程化的,但我的查询存在问题,无法查看消息以及线程中交换的其他消息。 db表看起来像这样。Facebook风格的消息收件箱

消息

  • 中间
  • SEQ
  • created_on
  • CREATED_BY

messag_recips

  • 中间
  • SEQ
  • UID
  • 状态

注:MID列是消息ID。将每个初始消息看作是一个线程的开始。我决定拥有一个主线程(MID),然后在其中包含消息 - 而不是具有所有父/子的唯一消息ID,这些都是由SEQ(序列号)列定义的。其余的很自我解释。 created_by和所有后续的用户标识都是数字标识,可能指向其他地方的不同用户标识。最后需要注意的是主键基于MID和SEQ - 每个MID/SEQ永远不会有多个条目。 STATUS列 - 这将是N代表新的,一种用于活性(或读取)和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')"; 

但它仅返回发送到当前用户的消息,我想它返回当前用户发送的消息。我应该如何修改查询?

回答

0

看起来好像你正试图让两个消息发送给当前用户,以及由当前用户发送的消息......或OR关系。

试试这个:

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

感谢,它的工作完美 – MrFoh 2012-01-15 21:27:16