【发布时间】:2012-12-23 01:14:25
【问题描述】:
这是我的mysql表结构:
msgid | senderid | sender | recipientid | recipient | title | message | date
我希望在收件箱中显示我的私人消息系统,就像 Facebook 所做的那样。也就是说,无论是传入还是传出,每个对话都会从表中输出一次。例如:
My username is 'admin'.
USER | MESSAGE | DATE | DIRECTION
Dan | Hello | 1/2/10 | Incoming
Bob | How are you Bob?| 30/1/10 | Outgoing
问题是由于方向不同,用户名不重复。例如:
USER | MESSAGE | DATE | DIRECTION
Dan | Hello | 1/2/10 | Incoming
Bob | How are you Bob?| 30/1/10 | Outgoing
Bob | Hi admin | 30/1/10 | Incoming
因此,我需要确保显示的唯一消息是最新的通信,无论方向如何(即,与另一个用户的最新消息,无论该用户是“发送者”还是“接收者”)。
我在这个网站上使用 PHP/MYSQL。我已经尝试了数千种方法来做到这一点,但我就是想不通。可能是我的数据库结构不正确。我将在线几个小时(之后会不断检查),请随时提出任何问题。
【问题讨论】:
-
您能举个例子说明您尝试过的方法吗?我说您正在寻找用户发送或接收的最新消息是否正确?
-
是的,我正在寻找用户发送或接收的最新消息。我试过了:
SELECT i.correspondent, m.subject, i.msg FROM ( SELECT sender AS correspondent, MAX(message) msg FROM mesages WHERE receiver='Daniel' GROUP BY sender UNION SELECT receiver AS correspondent, MAX(message) FROM mesages WHERE sender='Daniel' GROUP BY receiver )i, messages m WHERE i.msg=m.message; -
(SELECT Receiver, Subject, Message ,'Sender' as 'type' FROM m WHERE Sender='Daniel' ORDER By message desc limit 1) UNION ALL (SELECT Sender, Subject, Message ,'Reciever' as 'type' FROM m WHERE Receiver='Daniel'ORDER By message desc limit 1) -
现在我在想这样的事情:
$query = "SELECT * FROM messages WHERE sender = '$user'"; $outgoing = mysql_query($query) or die(mysql_error()); $query = "SELECT * FROM messages WHERE reciever = '$user'"; $incoming = mysql_query($query) or die(mysql_error()); while($outgoing = mysql_fetch_array($outgoing) && $incoming = mysql_fetch_array($incoming)){那看看哪个方向比较新?我不知道! -
请原谅这些文字块!
标签: mysql select private-messaging