1
需要爲所有用戶和個人消息實現公共消息的傳遞。查詢 - 向用戶發送公共和私人消息
簡表:
messages
+---------------+---------------------------+
| Field | Type |
+---------------+---------------------------+
| id | int(10) unsigned |
| admin_id | int(10) unsigned |
| type | enum('public','targeted') |
| subject | text |
+---------------+---------------------------+
messages_read_status
+----------------+---------------------------------+
| Field | Type |
+----------------+---------------------------------+
| id | int(10) unsigned |
| message_id | int(10) unsigned |
| user_id | int(10) unsigned |
| status | enum('unread','read') |
+----------------+---------------------------------+
當發送公共消息 - 在 messages_read_status表記錄未創建。用於定位消息 - 創建記錄未讀狀態。當用戶讀取消息時 - 設置讀取狀態。
客戶端的兩個過濾器 - 讀/未讀。消息類型對用戶無關緊要。
主要任務 - 創建查詢,以請求已讀或未讀消息用戶,而不管類型的消息的。
的主要問題是在查詢請求來處理公衆未讀郵件,因爲可以在 messages_read_status沒有他們的記錄。當某些用戶閱讀郵件時,UNREAD查詢可以正常工作。然後在 messages_read_status創建的新記錄和其他用戶不能再看到此消息。這種情況我無法解決。 READ查詢正常工作。
SELECT messages.* FROM messages
LEFT JOIN messages_read_status
ON messages.id = messages_read_status.message_id
WHERE
{OTHER FILTERS} AND
(messages_read_status.`id` IS NULL OR (messages_read_status.`user_id` = $user_id AND messages_read_status.`message_status` = '$message_status'))
samlpe SQL - http://sqlfiddle.com/#!2/d940d
謝謝
+1爲sqlfiddle.com鏈接。 – Pursuit 2012-02-07 19:56:30