我正在开发邮件系统并且在写下查询(MYSQL)时遇到了麻烦。 简而言之,查询应该将每个对话用户的最后一条消息的数组返回给用户。用于邮件系统的mysql查询
CREATE TABLE 'tbl_message'('id' int(10) AUTO_INCREMENT,
'from_user' int(10),
'to_user' int(10),
'reply_to' int(10),
'subject',
'body' text,
'status' tinyint(3),
'deleted_from_sender' tinyint(3),
'deleted_from_recipient' tinyint(3)',
'created_on' datetime,
我写查询:
SELECT * FROM tbl_message s1 WHERE s1.created_on IN (
SELECT MAX(s2.created_on)
FROM tbl_message s2 WHERE s1.from_user=".$userID." OR s2.to_user=".$userID."
GROUP BY s2.from_user, s2.to_user)
AND status = 0";
这工作正常,但给我的FROM_USER和to_user 2级最后的消息,而不是从两个1成最后一条消息。那是因为GROUP BY当然了,现在的问题是我怎么能在子查询中找到最大的created_on(实际上是mysql datestamp)?或者任何其他解决方案将不胜感激。 感谢任何帮助或建议。
2天后挖计算器和MySQL手册,希望从DB教授:)
UPD帮助: 一些数据,例如
+----+-------+--------+--------+---------------------+--------+---------+
| id | from_user | to_user | subject | created_on | status |
+----+-------+--------+--------+---------------------+--------+---------+
| 1 | 68 | 128 | somesubject1 | 2013-07-01 21:31:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 2 | 128 | 68 | somesubject2 | 2013-07-01 21:41:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 3 | 128 | 68 | somesubject3 | 2013-07-01 21:51:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 4 | 68 | 226 | somesubject4 | 2013-07-01 22:01:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
查询的输出
| 3 | 128 | 68 | somesubject3 | 2013-07-01 21:51:29 | 0 |
+----+-------+--------+--------+---------------------+--------+---------+
| 4 | 68 | 226 | somesubject4 | 2013-07-01 22:01:29 | 0 |
你可以使用示例数据和期望的结果来填写此内容并发布更新的提琴吗? http://sqlfiddle.com/#!2/ac316 - 这将帮助我们得到您的答案。 – sgeddes
您能不能在已知托管恶意软件的网站上发布图像? http://google.com/safebrowsing/diagnostic?site=radikal.ru/ – Oerd
sgeddes已更新。 Oerd对不起,它只是一个托管的图像应该没有恶意软件 – Alekso