항목
id | name |
-------------------
1 | bla |
2 | lala |
소식
topic_id | user | time |
--------------------------------------------
1 | X | 2013-08-09 12:00:00 |
1 | Y | 2013-08-09 13:00:00 |
2 | Y | 2013-08-09 12:00:00 |
--------------------------------------------
,363,210
USER_VIEWS 사용자가 포럼을 열고 첫
이
topic_id | user_id | posts | read |
---------------------------------------------
NULL | NULL | NULL | NULL |
---------------------------------------------
, 당신은
INSERT INTO `user_views` (`topic_id`, `user_id`, `posts`, `read`)
VALUES (
(SELECT `id` FROM `topics`),
$_SESSION['user_id'],
(SELECT COUNT(`topic_id`) FROM `posts` GROUP BY `topic_id`),
0
);
그래서 새 게시물을 추가해야합니다, 그것은되었다 :
USER_VIEWS
topic_id | user_id | posts | read |
---------------------------------------------
1 | 5 | 2 | 0 |
2 | 5 | 1 | 0 |
---------------------------------------------
사용자가 topic_id = 1을 열었으므로 게시물이 자동으로 읽히게되었습니다 (어쩌면 각 게시물을 읽는 방법을 추적하지 않음).그래서 주제의 정확한 개방에 :
UPDATE `user_views` SET `read` = (SELECT COUNT(`topic_id`) FROM `posts` WHERE `topic_id` = $_GET['topic_id'] AND user_id = $_SESSION['user_id'];
지금되었다 :
USER_VIEWS
topic_id | user_id | posts | read |
---------------------------------------------
1 | 5 | 2 | 2 |
2 | 5 | 1 | 0 |
---------------------------------------------
이제 새 게시물이 topic_id에서 이루어집니다 = 1 :
게시물
topic_id | user | time |
--------------------------------------------
1 | X | 2013-08-09 12:00:00 |
1 | Y | 2013-08-09 13:00:00 |
2 | Y | 2013-08-09 12:00:00 |
1 | Z | 2013-08-09 14:00:00 |
--------------------------------------------
T 으로
topic_id | user_id | posts | read |
---------------------------------------------
1 | 5 | 3 | 2 |
2 | 5 | 1 | 0 |
---------------------------------------------
을
USER_VIEWS :
UPDATE `user_views` SET `posts` = (SELECT COUNT(`topic_id`) FROM `posts` WHERE `topic_id` = (SELECT `id` FROM `topics` WHERE `id` = `posts`.`topic_id`) AND user_id = $_SESSION['user_id'];
그래서이되었다 : 그는 사용자가이 작업을 수행하지 않는 경우에만 게시물 및 뷰를 삽입 할 수있는 새로운 주제,이 경우는 검사, 포럼을 엽니 다 읽지 않은 게시물을 검색 할 수있다 :
이
SELECT `topic_id`, `user_id`, `posts`-`read` as 'unread' FROM `user_views` WHERE user_id = $_SESSION['user_id'];
이 반환합니다
,691 363,210
USER_VIEWS
topic_id | user_id | unread |
----------------------------------
1 | 5 | 1 | // 3-2
----------------------------------
2 | 5 | 1 | // 1-0
----------------------------------
그래서 마지막 방문에서, 사용자는 이제 각 주제 만 1 새 게시물이 있습니다.
나는 당신이 논리를 가지고 있기를 바랍니다. 어쩌면 세션이나 쿠키에서 이미 본 게시물을 저장하는 것이 더 쉬운 방법 일지 모르지만 나에게는 신뢰할 수없는 것처럼 보입니다. 따라서 새 테이블이 괜찮습니다.
사용자가 포럼을 방문 할 때 처음으로 새 항목을 삽입하는 방법은 앱 로직에 따라 다릅니다.
물론 쿼리에 오류가있을 수 있으므로 최대한 노력해 보았습니다. 이것들은 단지 예일 뿐이므로 앱에 적합하게 만들어야합니다. 즉, $ _GET 또는 $ _SESSION을 쿼리에 직접 삽입하지 않아야합니다.
PS : 나는 POSTS
테이블에 자동 증가 키 열 id
을 가지고 제안, 그래서 그것은 즉 SELECT COUNT(id) FROM posts
항상 3 'topics'in array입니까? - 상수는 – jaczes
아니요, 다른 숫자입니다. – user1365447
모든 답변을 확인하겠습니다. – user1365447