2011-04-24 71 views
0

我在MySQL數據庫中有表「消息」。它有三列: msg_id, user_id, msg_contentselect message for message feed

用戶自由地添加/刪除消息。

我想顯示的訂閱源:
1.顯示按ID排序的消息。
2.如果同一用戶在同一行中恰好有多於2條消息,則只顯示同一用戶的2條消息。
3.顯示器10個在一個時間

例如,如果我們有消息:
MSG_ID 1邀請,USER_ID甲
MSG_ID 2邀請,USER_ID甲
MSG_ID 3邀請,USER_ID甲
MSG_ID 4邀請,USER_ID乙
MSG_ID 5,USER_IDç
MSG_ID 6,USER_ID乙
MSG_ID 7,USER_ID乙
MSG_ID 8,USER_ID乙
MSG_ID 9邀請,USER_ID甲
MSG_ID 10,USER_ID˚F
MSG_ID 11,USER_ID d
MSG_ID 12,USER_IDÈ
...

進料將是這樣的:
MSG_ID 1邀請,USER_ID甲
MSG_ID 2,USER_ID甲
MSG_ID 4,USER_ID乙
MSG_ID 5,USER_IDç
MSG_ID 6,USER_ID乙
MSG_ID 7,USER_ID乙
MSG_ID 9邀請,USER_ID甲
MSG_ID 10,user_i d˚F
MSG_ID 11,USER_ID d
MSG_ID 12,USER_IDē

什麼是最好的方式實現飼料 「選擇」 在mysql中的語句?

謝謝

回答

2

如果每個用戶發佈一排100點的消息,你將不得不提取500行... 雖然可以做到在存儲過程中它與附加列更容易,可以說, 「num」,對來自同一用戶的消息進行計數。當插入來自用戶ID檢查ID和最後一個用戶的NUM即發佈消息,提示信息:

SELECT user_id, num FROM messages ORDER BY msg_id DESC LIMIT 1 

並插入NUM + 1是否有新的消息的user_ID的匹配你從查詢中獲得或NUM = 1插入一個如果不。 然後您可以通過簡單的查詢獲取您的Feed:

SELECT * FROM messages WHERE num<=2 LIMIT 10 
+0

好主意!非常感謝你。 – user215097 2011-04-26 07:21:24