2012-01-23 5 views
1

그래서 YouTube와 같은 사이트가 사용자가 '좋아요'한 동영상을 기억하고 다시 좋아할 수없는 것을 어떻게 기억하는지 궁금합니다. 비슷하게 Reddit과 같은 사이트는 upvotes 및 downvotes를 기억하고 사용자가 이미 upvoted 한 콘텐츠를 upvoting하는 것을 방지합니다.유튜브는 좋아하는 것을 어떻게 기억합니까?

콘텐츠 ID가 사용자 ID 및 응답과 함께 저장되는 데이터베이스 테이블만큼 간단합니까? 나는 거대한 테이블이 될 것 같은 느낌. 거기에 더 까다로운 일이 있습니까?

+0

reddit의 소스 코드를 사용할 수 있습니다. 그것을 사용하십시오 ... – plaes

+0

그래, 나는 그것으로 들여다 보았습니다. 그러나 나는 꽤 초보자입니다. 그래서 지나치게 압도적이었습니다. 그래도 그것을 통해 탐구하는 것입니다. – John

답변

1

내 페이지에 좋아요/싫어요 시스템이 있습니다.

데이터베이스 테이블 :

1) 각 게시물에 대한 고유 ID와 내용, 태그 등)와 같은 다른 정보와 함께 (그것을 만든 사람의 USER_ID와 함께 귀하의 게시물을 포함 하나.

2) 표는 적어도 다음과 같은 필드, ID, post_id를 함께 좋아라고 (() 좋아하거나 싫어 한 후 테이블에 포스트, USER_ID에 해당하는 좋아했던 사용자 테이블에서 사용자에 해당/싫어함), 상태 (0 또는 1, 0은 게시물을 좋아하고 1은 게시물을 싫어함).

사용자가 게시물을 좋아하는 경우 user_id 및 post_id를 사용하여 likes 테이블에 행을 삽입하고 상태를 0으로 설정하거나 0이 기본값이기 때문에 비워 두십시오. 사용자가 소식을 싫어하면 1과 동일한 상태로 설정하고 상태를 설정합니다.

이렇게하면 소식 페이지에서 소식을 좋아하거나 싫어하는 모든 사용자의 수를 알 수 있습니다. 사용자의 프로필 페이지에서 사용자가 좋아하거나 싫어하는 모든 게시물을 얻을 수 있습니다. 좋아요 또는 싫어요가 가장 많은 소식의 순위를 매길 수도 있습니다. 또는 좋아요 또는 싫어요가 가장 많은 콘텐츠를 게시 한 사용자별로 순위를 매기십시오.

사용자가 이미 데이터베이스에 레코드가있는 경우 게시물을 좋아하거나 싫어하는 것을 허용하지 마십시오. (기본적으로 post_id가 현재 게시물과 같고 user_id가 로그인 한 사용자와 같은 likes 테이블의 레코드 수를 확인하십시오.)

게시물의 작성자 user_id를 가져 오기위한 게시 테이블을 상호 참조하십시오. 게시물 작성자 user_id가 로그인 한 사용자와 같거나 현재 로그인하지 않은 경우 사용자가 투표하도록 허용하지 않습니다.

모든 작업을 수행하는 쿼리는 간단합니다 (단순히 SELECT * 또는 SELECT user_id).하지만 이는 기본 아이디어입니다.

-4

예, 간단합니다. 일반적으로 사이트는 IP 주소를 사용하므로 사용자는 다른 계정에서 두 번 투표하지 않습니다.

편집 : 죄송합니다. 틀렸어. Quentin에 따르면 웹 사이트는 여러 사용자가 동일한 IP를 가지고 있고 시스템을 악용하지 않을 가능성 때문에 IP를 기반으로하지 않습니다. 소규모 사이트 (적어도 내가 사용했던 일부 사이트)는 IP를 기반으로 투표 시스템을 구현했습니다. 그렇지 않으면 콘텐츠 순위를 조작하기가 더 쉬워 졌기 때문입니다.

+3

일반적으로 사이트는 NAT 주소가 너무 많아서 IP 주소를 사용하지 않기 때문에 많은 수의 사용자가 다른 사람과 IP 주소를 공유합니다. – Quentin

+0

잘 됐네, 고마워. – John

+0

@Quentin, 죄송합니다. 잠시 후에 내 대답을 삭제하겠습니다. 나는 그것을 몰랐다. – mowwwalker

9

사이트에서 "like"및 "upvote"를 클릭하기 전에 로그인해야합니다. DB의 콘텐츠 문서에는 수신 된 좋아요 수를 저장할 필드가 있습니다. like 버튼이 렌더링되기 전에, 사이트는 DB에있는 로그인 된 사용자의 레코드를 점검하여 그가 이미 좋아하는지 확인합니다. 따라서 "좋아요"또는 "다른"옵션이 표시됩니다.

Stackoverflow에서 여기를 확인한 경우 자신의 질문이나 답변에서 "upvote"를 클릭하면 우리 자신의 게시물을 upvote 할 수 없다는 메시지가 표시됩니다. "upvote"를 클릭하면 Ajax 요청이 사용자 ID 및 질문 ID와 같은 기타 정보와 함께 서버로 전송되며 서버 코드는 upvote가 허용되는지, 예를 들어 사용자 ID가 동일하지 않아야하는지 확인합니다 게시물 작성자의 ID입니다.

관련 문제