2012-03-28 77 views
0

我已經創建了一個收件箱系統。用戶登錄可以向其他登錄用戶發送消息。來自數據庫的usermessage表有兩個字段1. userid和2. messageid。以下是此表的摘錄。Mysql和PHP收件箱更新

userid | messageid 
12  | 1 
13  | 1 
14  | 2 
15  | 2 
12  | 3 
15  | 3 
12  | 4 
14  | 4 

在上述情況下,用戶'12'向用戶'13'發送消息。我希望messageid'1'移動到表格的底部,以便當用戶'12'或'13'正在檢查他的郵箱時,messageid'1'需要作爲最近的對話出現在收件箱的頂部。到目前爲止,我已經能夠通過刪除messageid'1'並插入作爲每個用戶標識的新查詢來實現此目的。這是我的代碼:

DELETE FROM usermessage WHERE userid = '12' and messageid = '1'; 
INSERT INTO usermessage SET userid = '12', messageid = '1'; 
DELETE FROM usermessage WHERE userid = '13' and messageid = '1'; 
INSERT INTO usermessage SET userid = '13', messageid = '1'; 

是否有可能通過一個查詢來完成此操作。到目前爲止,我無法在與我的問題相關的stackflow中找到任何明確的答案。

+1

OMG。你有沒有聽說過正常化數據和良好的相對數據庫設計? – heximal 2012-03-28 22:52:56

+0

用戶消息表上的時間戳字段(使用類似於ON UPDATE CURRENT_TIMESTAMP的內容)和用於顯示收件箱的select上的更明智的ORDER BY可以更好地實現此目的。 – cmbuckley 2012-03-28 22:53:54

+0

不應該12發送到13只是創建一個新的行,你不應該回收消息ID。 – 2012-03-28 22:54:29

回答

0

沒有SORT語句查詢行沒有給出擔保,他們將在創建的時間順序進行排序。從現在起,MySQL只是給你一個這樣的排序行爲。

因此,您需要找到或創建一個客觀的排序規則。它可以是消息的時間戳,也可以是[usermessage]表中的新時間戳列。

這也是明顯的,刪除並重新創建行會影響MySQL的工藝成本,因爲MySQL將需要每次刪除和插入的時間來更新[usermessage]表中的索引。 OMG。

+0

謝謝。時間戳是一個明確的答案。 – Hari 2012-03-28 23:21:36