2012-08-22 2 views
3

Ive는 주제와 답장을위한 두 개의 표가 있습니다.사용자가 읽은 후 포럼을 읽은 다음 새 답글이 게시 될 때 새 것으로 표시하십시오.

+------------------+  +------------------+ 
| forum_topics  |  | forum_posts  | 
+------------------+  +------------------+ 
| topic_id   |  | post_id   | 
| topic_title  |  | post_content  | 
| topic_contents |  | post_date  | 
| topic_date  |  | topic_id   | 
| topic_keywords |  |     | 
+------------------+  +------------------+ 

나는 그것이 사용자가 주제로 페이지를 볼 및 특정 사용자에 대해 읽으면서이 표시됩니다 항목을 읽고 그렇게되면합니다. 그러나 다른 사용자가 해당 스레드에 와서 회신하면 마지막 방문 이후에 새로운 게시물로 표시되거나 비슷한 것으로 표시되기를 원합니다.

아이디어가 있으십니까? 사전에

감사합니다.

당신은 다음과 같이 사용자와 포럼 게시물에 연결된 룩업 테이블을 사용하여이 작업을 수행 할 수

답변

2

:

사용자가 포럼을 볼

에 그런

userID, topic_id, post_id, currentTime 

처럼 룩업 테이블에 행을 입력 사용자가이 포럼을 이미 읽었는지 여부를 결정하면 표를 쿼리하여 사용자 ID가 표시되는지 여부를 확인할 수 있습니다.

그런 다음 currentTime 열을 포럼/스레드의 마지막 항목과 비교하여 사용자가 마지막 게시물을 본지 여부를 알려주는 큰 항목을 확인할 수 있습니다.

편집 :

<?php 
$userUpdateTime = gmdate(); // assumed to be either dateTime or unixTimestamp of when user last red the topic/forum 
$qry = ' 
SELECT 
    IF(`forum_topics`.`updateDateTime` > "'.$userUpdateTime.'", "unRead", "Read") 
FROM 
    `forum_topics` '; 
+0

내 게시물/주제에 시간을 추가해야합니다. 현재 게시 된 날짜 만 저장합니다. 비트가 나를 붙잡고있는 현재 시간을 어떻게 비교할 수 있는지 예제 코드를 보여 주시겠습니까? – Exoon

+0

@Exoon 답을 사용자가 이미 읽었는지 아닌지를 결정하기 위해 쿼리에서 사용할 수있는'if' 문 예제로 업데이트했습니다. 조회 테이블이있는 경우 두 테이블을 잘 결합하여 삽입 된 변수를 조회 테이블 열 이름으로 바꿔서 읽었는지 여부를 확인할 수 있습니다. – Fluffeh

+0

죄송합니다. 아직 혼란 스럽습니다. (필자는 현재 사용자가 항목을 볼 때 주제 ID, 사용자 ID 및 현재 시간을 DB에 입력하고 올바르게 읽은 것으로 표시합니다. 언제 post_id를 입력합니까? – Exoon

0
: 예, 당신은 (그것을 어쨌든 게시물이 만들어진시기를 알 일반적으로 좋은 방법입니다) 주제 및 게시물에 날짜 열을 추가해야합니다 일부 PHP/SQL에 대한 등

내 포럼 회원 테이블 당 스레드 당 다음을 사용 :

CREATE TABLE `forum_thread_member` (
    `thread_id` mediumint(8) unsigned NOT NULL DEFAULT '0', 
    `member_id` smallint(5) unsigned NOT NULL DEFAULT '0', 
    `last_post_id` mediumint(8) unsigned NOT NULL DEFAULT '0', 
    `read_flag` bit(1) NOT NULL, 
    `posted_flag` bit(1) NOT NULL, 
    `new_flag` bit(1) NOT NULL, 
    `mark_flag` bit(1) NOT NULL, 
    `bookmark_flag` bit(1) NOT NULL, 
    `hidden_flag` bit(1) NOT NULL, 
    PRIMARY KEY (`thread_id`,`member_id`), 
    KEY `bookmark_flag` (`bookmark_flag`) 
) 

스레드의 목록을 조회, 내가 조인 떠났다. 값이 NULL이면 스레드가 아직 읽히지 않았습니다. 이를 통해 사용자가 읽고 쓰는 스레드를 정확히 알 수 있습니다.

last_post_id은 사람이 읽은 마지막 게시물로 시각적으로 건너 뛰고 표시 할 수 있기 때문에 유용합니다. new_flag은 누군가 게시 할 때마다 1으로 설정되므로 스레드 목록에 새로운 (읽지 않은) 내용이 있는지를 시각적으로 쉽게 확인하는 데 사용됩니다. 다른 플래그는 북마크, 스레드 숨기기 등을 관리하는 데 사용됩니다.

물론이 테이블은 상당히 커질 수 있지만 중요한 플래그가 설정되어 있지 않으면 이전 레코드를 안전하게 삭제할 수 있습니다 (예 : bookmark_flag) . 사람이 오래된 스레드를 검색하거나 탐색하는 경우 새 스레드에 대한 것처럼 읽지 않은 것으로 가정하지 않고 이전 스레드가 검색되었다고 가정 할 수 있습니다.

관련 문제