2012-09-06 64 views
0

我有一个MySQL查询我在发件人 的最新消息的排序有一个问题在这里是我下面的查询: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 

这里是从数据库中我的表: 用户表

MemberID  UserName  Email    Password 
1    User1  [email protected] 123456 
2    User2  [email protected] 123456 
3    User3  [email protected] 123456 
4    User4  [email protected] 123456 
5    User5  [email protected] 123456 

信息表:

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 

和我的查询的输出中:

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 

是:

​​

如果你已经注意到,从日期排列是正确的,但最新的消息是不正确的。我想要这样的输出。

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 

相反,我要排序这是最新的消息的消息“2你好测试”的 “你好测试5

任何一个可以帮助我的问题呢?

太谢谢你了...

+0

你可能要考虑散列这些密码在用户表 – hdgarrood

回答

1

它应该是这样的,

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 
+0

感谢约翰..你太棒了!我想知道如果我可以在zend框架上做这个查询... – devrez

+1

@RezFlorendo:'$ stmt = $ zendDbInstance-> query($ query); $ results = $ stmt-> fetchAll();'其中'$ query'是...查询,约翰给你。 – tuespetre