我有兩個表的數據庫。其中一個用於收件箱郵件(inbox
),另一個用於發件箱郵件(outbox
)。他們都有相同的結構和一些記錄。
+------------------------------------------------------------+
| inbox |
+------------------------------------------------------------+
| messageID | from | to | messageText | timestamp |
+------------------------------------------------------------+
| 1 | userA | userB | sometext | 2013-06-19 10:30 |
| 2 | userB | userC | sometext | 2013-06-19 10:40 |
| 3 | userC | userA | sometext | 2013-06-19 10:50 |
+------------------------------------------------------------+
和
+------------------------------------------------------------+
| outbox |
+------------------------------------------------------------+
| messageID | from | to | messageText | timestamp |
+------------------------------------------------------------+
| 1 | userA | userC | sometext | 2013-06-19 10:20 |
| 2 | userC | userB | sometext | 2013-06-19 10:30 |
| 3 | userB | userA | sometext | 2013-06-19 10:35 |
+------------------------------------------------------------+
問題
我需要從一個特定用戶的每次談話每一個最後的消息(在這種情況下 - 我想要從每一個最後的消息在用戶A的對話中,無論消息是哪個表 - 收件箱或發件箱。我已成功地選擇從收件箱中每個會話的最後一條消息,並與下面的查詢發件箱:所以現在
SELECT * FROM
(
SELECT from, to, timestamp, messageText, messageID
FROM inbox
WHERE to = 'userA'
ORDER BY timestamp DESC
)
AS tmp_table GROUP BY from
UNION
SELECT * FROM
(
SELECT from, to, timestamp, messageText, messageID
FROM outbox
WHERE from = 'userA'
ORDER BY timestamp DESC
)
AS tmp_table GROUP BY to
ORDER BY timestamp DESC
我需要檢查哪些消息是新的 - 一個在收件箱或一個發件箱中(如果消息兩個用戶之間的這兩個表中都存在),並且只返回最新的消息。
或者,也許我的做法是徹頭徹尾的愚蠢 - 請評論:D謝謝。
老實說,沒有理由將數據存儲在兩個單獨的表中。 – Jessica
我同意@Jessica,一張桌子和擔心。嘗試添加'限制1' – amigura
@Jessica - 是的,我現在 - 我肯定會使用不同的結構,但可惜我堅持這一個,因爲我不允許「客戶端」修改它。 – August