2013-01-04 18 views
1

我需要在用戶的收件箱中將消息顯示爲對話。按發件人分組並顯示最後一條消息(從發件人收到的最後一條消息或我對該發件人的最新回覆)。MySQL將羣組消息作爲對話查詢

到目前爲止,我目前的MySQL查詢只顯示所有收到的消息沒有任何分組。

這裏是我的數據庫結構:

+-----------------------------------------------------------------------------------+ 
|         users_messages         | 
+-----------------------------------------------------------------------------------+ 
| message_ID | from_id | to_id | date | subject | body | unread | delete1 | delete2 | 
+-----------------------------------------------------------------------------------+ 

+---------------------+ 
|  users  | 
+---------------------+ 
| id | username | ... 
+----+----------+-----+ 

這裏是我當前的查詢:

$result = $DB->query("SELECT p.*, p.sender as sender, m.* 
FROM " . DB_PREFIX . "messages p 
LEFT JOIN " . DB_PREFIX . "members m ON p.sender=m.member_id 
WHERE p.receiver='" . $SESSION->conf['member_id'] . "' AND delete2=0 
ORDER BY p.senddate DESC 
LIMIT " . (($page - 1) * $PREFS->conf['per_page']) . ", " . $PREFS->conf['per_page']); 
+0

沒有「談話「在你的結構中分組。你的意思是'from_id'和'to_id'的獨特組合嗎?您希望消息來自數據庫嗎? – AndreKR

+0

嗨,感謝您的回覆。我目前使用傳統風格,其中,消息顯示在INBOX和SENT項目中,每條消息都作爲單獨的條目。我不想再這樣了。我需要在INBOX中顯示所有內容。每封郵件都由發件人分組,這也包括我對該發件人的回覆,從而顯示與該發件人的對話。 如果你沒有明白我的意思。檢查Facebook。 :) – SamPaGa

+0

Facebook不是一個數據庫。 – AndreKR

回答

3

的凌亂類 - 而應該爲你工作:

SELECT 
    * 
FROM 
    user_messages 
WHERE 
    message_ID IN ( 
    SELECT 
     MAX(message_ID) 
    FROM 
     (SELECT 
      IF(m.from_id = <THE USER ID>, m.to_id, m.from_id) as other_user_id, 
      m.message_id 
     FROM 
      users_messages m 
     WHERE 
      m.from_id = <THE USER ID> OR m.to_id = <THE USER ID>) me 
    GROUP BY 
     other_user_id 
    ) 
ORDER BY 
    message_id DESC 
+0

謝謝,我會試試這個。 – SamPaGa

+0

嗨,這是我當前的查詢: '$ result = $ DB-> query(「SELECT p。*,p.sender as sender,m。* FROM」.DB_PREFIX。「messages p LEFT JOIN」。DB_PREFIX。 「('('('))成員在ON p.sender = m.member_id WHERE p.receiver ='」。$ SESSION-> conf ['member_id']。''AND delete2 = 0 ORDER BY p.senddate DESC LIMIT「。 $ page-1)* $ PREFS-> conf ['per_page'])。「,」。$ PREFS-> conf ['per_page']];' – SamPaGa

+0

好嗎?你有沒有按照我所建議的方式嘗試一些東西?這應該會爲您提供該用戶每次對話中的最新消息。 –