2012-09-06 63 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