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

и Ouput моего запроса:

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

Если вы заметили, Сортировка с даты прав, но последнее сообщение не является правильным. Я хочу, чтобы мои результаты были такими.

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

Спасибо John .. Ваш большой! Я хотел бы знать, если я могу сделать этот запрос на zend framework ... – devrez

+1

@RezFlorendo: '$ stmt = $ zendDbInstance-> query ($ query); $ results = $ stmt-> fetchAll(); 'где' $ query' - это ... запрос, который дал вам Джон. – tuespetre

Смежные вопросы