[英]Mysql query sorting on joined tables
I have a mysql query I have a problem in sorting of the latest message of the sender here is my query below: 我有一个mysql查询,在对发件人的最新消息进行排序时遇到问题,这是下面的查询:
SELECT
`Mes`.`fromid`,
`Mes`.`is_read`,
`Mes`.`id` AS `mesid`,
`Mes`.`message`,
max(Mes.date) AS `date`,
`User`.`username`,
`User`.`MemberID` AS `Uid`
FROM `messages` AS `Mes`
INNER JOIN `users` AS `User` ON User.MemberID = Mes.fromid
WHERE (Mes.toid = 5 AND Mes.fromid <> 5)
GROUP BY `Mes`.`fromid`
ORDER BY `date` DESC
here is my table from the database: Users table 这是数据库中的表:Users表
MemberID UserName Email Password
1 User1 user1@gmail.com 123456
2 User2 user2@gmail.com 123456
3 User3 user3@gmail.com 123456
4 User4 user4@gmail.com 123456
5 User5 user5@gmail.com 123456
Messages table: 消息表:
id fromid toid message is_read date
1 5 2 hello test 1 1 2012-08-24 01:00:00
2 2 5 hello test 2 1 2012-08-24 02:00:00
3 3 5 hello test 3 1 2012-08-24 03:00:00
4 4 5 hello test 4 1 2012-08-24 04:00:00
5 2 5 hello test 5 1 2012-08-25 05:00:00
and the ouput of my query: 和我的查询的输出:
SELECT
`Mes`.`fromid`,
`Mes`.`is_read`,
`Mes`.`id` AS `mesid`,
`Mes`.`message`,
max(Mes.date) AS `date`,
`User`.`username`,
`User`.`MemberID` AS `Uid`
FROM `messages` AS `Mes`
INNER JOIN `users` AS `User` ON User.MemberID = Mes.fromid
WHERE (Mes.toid = 5 AND Mes.fromid <> 5)
GROUP BY `Mes`.`fromid`
ORDER BY `date` DESC
is : 是:
USERNAME MESSAGE DATE
user2 hello test 2 2012-08-25 05:00:00
user4 hello test 4 2012-08-25 04:00:00
user4 hello test 3 2012-08-25 03:00:00
If you have noticed Sorting from date is right, but latest message is not right. 如果您发现从日期排序是正确的,但是最新消息是不正确的。 I want my output like this. 我想要这样的输出。
USERNAME MESSAGE DATE
user2 hello test 5 2012-08-25 05:00:00
user4 hello test 4 2012-08-25 04:00:00
user4 hello test 3 2012-08-25 03:00:00
Instead of the message " hello test 2 " I want to sort the latest message which is " hello test 5 " 我想对最新消息“ hello test 5 ”进行排序,而不是消息“ hello test 2 ”
Any one can help my problem? 任何人都可以帮助解决我的问题吗?
Thank you so much... 非常感谢...
It should be like this, 应该是这样
SELECT * // -- select the columns you want
FROM Messages a
INNER JOIN
(
SELECT fromid, toid, MAX(`date`) maxDATE
FROM Messages
GROUP BY fromid, toid
) b ON a.fromID = b.fromID AND
a.toid = b.toid AND
a.`date` = b.maxDATE
INNER JOIN users c
ON c.MemberID = a.fromID
WHERE a.toid = 5 AND a.fromid <> 5
ORDER BY `date` DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.