2011-03-23 3 views
0

CMS 용 메시징 시스템을 구축 중이며 메시지 체인에서 읽지 않은 메시지 수를 얻는 방법을 찾을 수 없습니다.읽지 않은 메시지 수를 표시하는 SQL ... 읽지 않은 응답을 포함하여 ...

기본 메시지 또는 답장 메시지 중 읽지 않은 메시지인지 확인하는 방법이 필요합니다.

나는 필드가 "메시지"라는 테이블이 있습니다 ID를 활성은 [1,0], 제목, 메시지, 날짜, user_from, user_to, 응답, 볼, 제거를

때 메시지 읽기 I 사용자 아이디 조회 된 필드에 쉼표로 구분 된 것을 저장 : , 3,4,12,

다음

가이 같은 보낸 사람의 ID를 찾아 볼 것 있는지 확인하는 방법은 다음과 같습니다

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

나는 단지 어떻게해야하는지 알아 낸다. 이 SQL select에 논리를 추가하면 상위 메시지를 읽지 않은 것으로 표시해야하는지 확인할 수 있습니다. 다음 SQL은 훌륭하게 작동하며 모든 메시지와 응답 횟수를 수집하여 datetime으로 주문합니다.

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 

어떤 도움을 주시면 감사하겠습니다 ... 나는 내 머리를 감쌀 수 없습니다!

OK UPDATE, 당신은 단지 하나 개 때문에 응답의 수준 이상에 대한 필요성이 - Managing Hierarchical Data in MySQL

--edit :

+0

확인이 비슷한 문제 : http://stackoverflow.com/questions/4318010/print-hierachical-data-in-a-parent-child-form-unordered-list-를 php/4318846 # 4318846 –

+0

측면 질문 : 'viewed'및 'removed'필드의 기간은 얼마입니까? 100 명이 넘는 사용자가 메시지를 볼 때 어떻게됩니까? 쉼표로 구분 된 필드를 사용하는 것보다 테이블을 표준화 해보십시오. –

+0

또한이 질문 : http://stackoverflow.com/questions/5291054/hierarchical-sql-problem –

답변

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

+0

오케이, 나는 "메시지 체인"을 오해했습니다. –

+0

이 단순화 된 구조를 기반으로하는 추가 조언은 무엇입니까? 모든 메시지를 누가 복잡하게 보이는지 추적하기 위해 다른 테이블을 추가하는 것을 보았습니다. SQL이 메시지를 볼 수 있는지 확인하는 것은 간단합니다 ... 단지 기존의 SELECT에 그것을 통합하는 방법이 필요합니다. – RANGER

관련 문제