2

나는 PHP와 MySQL을 사용하는 비공개 메시징 시스템을 페이스 북과 같은 비트로 만들었습니다. 여부 읽기 - 비공개 메시지 알림 - 데이터베이스 테이블 디자인

  • senderUserID에게
  • RecUserID
  • 메시지
  • 주제
  • 날짜 시간
  • 상태를

    • 의 MessageID :

      데이터베이스 테이블은 다음 필드 (모든 상장되지 않음)이있다 또는 아니요

    • RepliedStatus - 어떻게 사용해야합니까?
    • DeleteRec -받은 편지함에서
    • DelSender 삭제 - 보낸 사람의받은 편지함을 삭제
    • RepliedUserId - orginal 한 메시지에 대한 사용자 응답이 전체 응답이 두 번째 테이블에 저장됩니다

    수신기의 ID로 변경, 각 이후 인 경우 메시지가 스레드를 만듭니다. 두 번째 표는이 같은 비트 같습니다

    • messageID 설명 - FK
    • 이 repuserID
    • 새 메시지가 사용자에게 전송되는 순간 메세지를 지정하지 않고
    • 날짜 시간

    전 읽지 않은 상태로 메시지의 '상태'를 변경합니다. 이렇게하면 카운트 쿼리를 실행하여 알림의 읽지 않은 모든 메시지를 나열 할 수 있습니다.

    하지만 사용자가 해당 메시지에 회신하면 원래의 '상태'입력란을 읽지 않은 상태로 설정합니다. 이는 두 사용자의 알림에 모두 표시되기 때문입니다. 그래서 나는 'RepliedStatus'라는 다른 필드를 만들었지 만 메시지 회신에 알림을 표시하는 방법을 모르겠다.

    감사합니다.

  • 답변

    2

    응답 테이블이있는 경우 첫 번째 상태에서 응답 상태 열이 필요하지 않습니다. 사용자가 메시지에 응답했다는 것을 알고있는 응답 테이블에 레코드가 있습니다.

    +0

    대답 하나의 문제가 회신 테이블에 상태를 가지고, 모두 (보낸 사람/수신기) 사용자가 얻을 것이다 답장은 얼굴 메시지와 같은 주 메시지에 대한 스레드처럼 동작하기 때문에 알림. 예 : 사용자 A는 사용자 B에게 메시지를 보내고, 사용자 B는 사용자 A가 동일한 메시지 등으로 답장하는 것보다이 메시지에 다시 답장합니다.이 메시지는 모두 동일한 메시지에 있습니다. – TheDeveloper

    0

    왜 INT 및 null 가능 열을 "previous_message"라는 이름의 첫 번째 테이블에 추가하지 않습니까? "?

    그래서 모든 메시지는 이전 표와 동일한 표를 가지며 순서를 알아낼 수 있습니다. 도움이된다면 같은 정의의 "next_message"컬럼을 가질 수 있고 응답시 관련 레코드를 업데이트 할 수 있습니다.

    각 회신에서 상태 열을 사용할 수 있습니다.

    동일한 DB 조직을 유지하려면 두 번째 테이블에 열 상태를 추가하는 것이 좋습니다 ("답장"이라고합시다).

    [{"0":"both", "1":"Sender", "2":"receiver"}]; 
    

    그리고 같은 트레드 메시지를 가져 오는 :

    희망이 내가 한 번 삭제 된 열을 넣어 같은 일 읽기 또는 좋아하지 읽기 것이다

    0

    을하는 데 도움이

    보낸 사람이 "삭제"

    $sql = "SELECT * FROM messagetreads 
    WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].") 
    AND deleted !== 0 
    ORDER by TreadID AND DateTime ASC"; 
    
    은 ... 모든 1 또는 0 삭제 colomn가 2 인 경우의 데이터베이스 변경에 relatedID을 밟아 ...

    트레드이다

    하지만 그것은으로 얻는 또 다른 colomn를 creat에 더 나은 생각 삭제 및 알림 데이터

    • TreadID (FK_message_Table) 같은
    • (0 삭제 = 반복을 모두 삭제 사용자 ID =이 보낸 사람에게 표시하지 않거나 수신기)
    • (0 통지 = 모두 사용자 ID =이 보낸 사람 또는 수신기)

    그런 다음이 상태 또는 삭제 문을 변경하는 ezee입니다 읽어 읽어 보시기 바랍니다. 이 같은

    선택이 될 것입니다 sometings :

    $SQL = "SELECT * 
    FROM messagetreads 
    WHERE (senderID OR receiverID = ".$_SESSION['MyCurrentId'].") 
    IN (SELECT TreadID WHERE delete !== (0 OR ".$_SESSION['MyCurrentId']."))"; 
    

    만약 우리의 회원 ID가 표시되지 않는 모든 트레드을 삭제 colomn에 참여하지만 수신기의 ID 인 경우 발신자는 0을 삭제하는 경우 두 멤버가 메시지를 "삭제"할 수 있도록 기여할 수 있습니다. 알림에도 똑같이!

    아주 멀리 나중에 크론 작업 (0) ...

    PS 읽기 아주 오래된 메시지를 삭제 올 수 있습니다 : 너무 사진에 벽에 새 게시물에 대한 통지 또는 의견 등이 될 수있다 통지 시스템을 또는 캘린더에 새로운 이벤트 ... 그냥 열 데이터에 더 많은 정보를 추가하고 PHP 또는 java-ajaxed 비슷하게 그것을 faormat ...

    +0

    [대기열] : http : //phpmaster.com/zend-queue/ 그리고 내가 발견 한 통지 방법은 message_tread에 메시지의 타임 스탬프와 구성원의 방문을 저장하고이를 병렬로 비교하는 것입니다 zend-queue doe (PHP-MASTER의 [zend-queue on queue] http://phpmaster.com/zend-queue/)와 같은 절차. 또 다른 테이블의 트레드에 참여자를 분리했습니다. 메시지 트레드 (페이스 북처럼 ...)에 회원을 추가 할 수 있고 모든 행에는 마지막으로 방문한 타임 스탬프, user_id, message_Tread_id –