2013-01-02 45 views
4

說的最高值我有三個表:,我需要一列加入三個表組的結果,並顯示來自另一列

  • users與名稱標識
  • emails含有具有行了電子郵件地址
  • messages含有包含他們的電子郵件

第二和第三表的日期,標題行的都可以匹配到第一個使用用戶的ID當然。

我想查詢將返回每個用戶只有一次,他們的電子郵件地址和他們最近消息的日期。

如果我用這個:

SELECT name,email,title,date 
FROM users 
JOIN emails ON users.id = emails.user_id 
JOIN messages ON messages.user_id = emails.user_id 
group by name 
order by date desc 

我沒有得到最新的消息,因爲排序已經加盟和分組後發生的事情。我從我的用戶那裏收到一封電子郵件,並且電子郵件按日期排序。

這可以在一個連接中完成嗎?我錯過了什麼?

您可以使用虛擬數據庫的Pastebin:http://pastebin.com/1x273aEe - 實際的數據庫不完全是這樣,但它是同樣的問題。

回答

3
SELECT a.*, b.*, c.* 
FROM users a 
     INNER JOIN emails b 
      ON a.ID = b.user_ID 
     INNER JOIN messages c 
      ON a.ID = c.user_ID 
     INNER JOIN 
     (
      SELECT user_id, MAX(date) maxDate 
      FROM messages 
      GROUP BY user_ID 
     ) d ON c.user_ID = d.user_ID AND 
       c.date = d.maxDate 
+0

嗨,上的jsfiddle爲要求的工作準確,謝謝。但令人好奇的是,在我的本地設置,客戶端和服務器上均無法正常工作5.1.44。無論如何,我有這個想法。 –

+0

你在本地機器上得到了什麼結果? –

+0

我得到重複。正確的四個結果以正確的順序出現,但它們再次出現。它可以在生產服務器上運行,但是可以運行在不同版本的MySQL上 –

相關問題