我一直在尝试为我的消息传递线程(即发件人/收件人)创建一个 MySQL 查询。
我有一个带有字段的表(msg_id = 唯一的 6 位 id,如 123456)。这个 (msg_id) 字段可能有很多行(对于每个 msg 回复),其中每一行都会像线程一样具有相同的 (msg_id)。因此,假设 bob 开始向 fred 发送消息,因此表中的线程将类似于(仅用于说明这一点的粗略示例):-
+---------+---------------------------+--------------------------+------------------------+------------+----------+
| msg_id | sender_email | recipient_email | sender_msg | cur_date | cur_time |
+---------+---------------------------+--------------------------+------------------------+------------+----------+
| 3189855 | bob@hotmail.com | fred@yahoo.com | hi fred, how are you? | 2013-03-10 | 17:12:18 |
| 3189855 | fred@yahoo.com | bob@hotmail.com | hi bob, I am great | 2013-03-10 | 17:15:20 |
| 3189855 | bob@hotmail.com | fred@yahoo.com | hi fred, good to hear | 2013-03-10 | 17:20:10
| 6749672 | jenny@barclay.cc | fred@yahoo.com | some other message | 2013-03-10 | 14:52:49 |
+---------+---------------------------+--------------------------+------------------------+------------+----------+
当显示 bobs 或 freds 电子邮件收件箱时,我想按最新(cur_date,cur_time)显示每个唯一的(msg_id),以便最新的 msg/msg 回复位于收件箱列表的顶部。
因此,让我们关注 Fred 邮箱,因为 Fred 拥有最多的邮件。我希望我的查询在输出收件箱电子邮件时显示以下结果:
+---------+---------------------------+--------------------------+------------------------+------------+----------+
| msg_id | sender_email | recipient_email | sender_msg | cur_date | cur_time |
+---------+---------------------------+--------------------------+------------------------+------------+----------+
| 3189855 | bob@hotmail.com | fred@yahoo.com | hi fred, good to hear | 2013-03-10 | 17:20:10 |
| 6749672 | jenny@barclay.cc | fred@yahoo.com | some other message | 2013-03-10 | 14:52:49 |
+---------+---------------------------+--------------------------+------------------------+------------+----------+
因此,查询获取每个唯一的 (msg_id) 并且对于每个唯一的 (msg_id),它获取最后一行(即,作为发送的线程中的最后一个 msg,它适用于发送的最新 msg)。如果这是有道理的。因此,我的问题是如何生成此 SQL 查询以给出上述结果。我的想法如下,但不起作用:-
SELECT * FROM inbox_table WHERE (recipient_email='fred@yahoo.com' AND ORDER BY cur_date DESC, cur_time DESC) GROUP BY msg_id ORDER BY cur_date DESC, cur_time DESC;
任何想法将不胜感激,我希望我能很好地解释这一点。