2011-03-23 31 views
0

我正在爲CMS構建消息傳遞系統,並且無法找到獲取消息鏈中未讀消息數量的方法。SQL顯示未讀消息的數量...包括未讀回覆

我需要一種方法來確定主消息或它的任何回覆消息是否未讀。

我有一個所謂的 「信息」 表具有以下字段: ID,活性[1,0],主題,消息,日期時間,user_from,user_to,回覆,查看,刪除

當消息讀我存儲在觀看現場用戶ID逗號分隔: ,3,4,12,

然後找出它是否看到我找發件人ID是這樣的:

m.viewed LIKE '%,$user_id,%' 

我只是想出如何克將該邏輯轉換爲此SQL選擇,以便我可以查看是否應將父消息標記爲未讀。以下SQL可以很好地工作並抓取所有消息和回覆的數量,並按日期時間對它們進行排序。

SELECT m.*, COUNT(*) AS num_replies, MAX(r.datetime) AS max_datetimeunread_replies 
FROM directus_messages AS m 
LEFT JOIN directus_messages as r 
    ON m.id = r.reply 
WHERE m.active = '1' 
AND m.removed NOT LIKE '%,$user_id,%' 
GROUP BY m.id 
HAVING m.reply = '0' 
ORDER BY datetime DESC, max_datetime DESC 

任何幫助將不勝感激......我不能包圍我的頭!

+0

檢查這個類似的問題:http://stackoverflow.com/questions/4318010/print-hierachical-data-in-a-parent-child-form-unordered-list- php/4318846#4318846 – 2011-03-23 07:59:36

+0

旁邊的問題:「查看」和「刪除」字段有多長?當超過100個用戶查看消息時會發生什麼?你應該嘗試使用逗號分隔的字段來標準化表格。 – 2011-03-23 08:01:31

+0

另外這個問題:http://stackoverflow.com/questions/5291054/hierarchical-sql-problem – 2011-03-23 08:10:49

回答

1

您應該檢查這篇文章:Managing Hierarchical Data in MySQL

- 編輯 - UPDATE

OK,你只有1級的答覆因此沒有必要對上述。

試試這個:

SELECT m.* 
    , COUNT(*) AS num_replies 
    , MAX(r.datetime) AS max_datetime 
    , (m.viewed LIKE '%,$user_id,%') 
     AS message_viewed --shows True or False 
    , SUM(r.viewed NOT LIKE '%,$user_id,%') 
     AS unread_replies --shows number of unread replies 
FROM directus_messages AS m 
    LEFT JOIN directus_messages as r 
    ON m.id = r.reply 
WHERE m.active = '1' 
    AND m.removed NOT LIKE '%,$user_id,%' 
GROUP BY m.id 
HAVING m.reply = '0' 
ORDER BY m.datetime DESC 
     , max_datetime DESC 
; 
+0

@ypercube我忘了解釋,每條消息只有一個級別的回覆...有消息和對這些消息的回覆。您無法回覆答覆。 – RANGER 2011-03-23 08:33:32

+0

好吧,我誤解了「消息鏈」。 – 2011-03-23 08:39:53

+0

基於這種簡化結構的進一步建議?我看到增加另一張表來跟蹤誰看過一條消息使事情變得複雜。查看消息是否被查看的SQL很簡單...我只需要一種方法將它合併到我現有的SELECT中。 – RANGER 2011-03-23 21:37:29