2013-10-25 83 views
0

我正在尝试为私人消息创建一个用户收件箱,它显示一个两个人之间最近的消息,以及最近一次订购的所有会话以及。它应该像Facebook邮件收件箱一样执行操作,您可以在其中单击最近消息的预览以查看完整对话,并且会话也按最近的顺序排列。这是我迄今为止的声明,但它没有显示任何内容,我无法弄清楚如何解决它。有人有任何建议吗?我如何订购行,然后对它们进行分组,然后订购组

$sqlInbox = " 
    SELECT sender, receiver, message, parent, rView 
    FROM (SELECT sender, receiver, message, parent, rView 
     FROM messages 
     WHERE receiver='$log_username' OR sender='$log_username' 
     ORDER BY timestamp DESC) 
    GROUP BY parent 
    ORDER BY timestamp DESC"; 

父列代表完整的对话,所以两套的人,无论是谁发送或者接收之间的任何消息,将在表中的同父ID。提前致谢。

+0

它是否收到错误?你在检查错误吗? – Barmar

+0

我没有看到任何错误。 – user2250471

+0

[检索每个组中的最后一条记录]的可能的重复(http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group) – Barmar

回答

0

我注意到的一件事是,您需要按您选择的所有列进行分组。

SELECT sender, receiver, message, parent, rView 
FROM (SELECT sender, receiver, message, parent, rView 
    FROM messages 
    WHERE receiver='$log_username' OR sender='$log_username' 
    ORDER BY timestamp DESC) 
GROUP BY sender, receiver, message, parent, rView 
ORDER BY timestamp DESC 
+1

MySQL不需要这个。 – Barmar

+0

如果您按所有列进行分组,则分组没有意义,您可以使用“SELECT DISTINCT”。 – Barmar

+0

啊,出于某种原因,我正在考虑使用不同组而不是group。谢谢, – MarCrazyness

0

检查,如果这个工程..

SELECT sender, receiver, message, parent, rView 
FROM messages 
WHERE receiver='$log_username' OR sender='$log_username' 
ORDER BY parent ASC, timestamp DESC 
+0

仍是同样的问题。会话按最近的消息排序,但每个会话仍显示第一个消息,而不是最近的消息。 – user2250471

+0

你的问题说你没有得到_any_输出,不是你得到错误的输出。 – Barmar

+0

对不起。内部选择不会输出,上面的版本会输出错误。 – user2250471

0

睡在它之后,逻辑来找我。以下似乎解决了我所有的问题。

$sqlInbox = " 
    SELECT a.* 
    FROM (SELECT * FROM messages 
     ORDER BY timestamp DESC) AS a 
    WHERE receiver='$log_username' OR sender='$log_username' 
    GROUP BY parent 
    ORDER BY timestamp DESC";