복붙노트

[SQL] SQL에서 해커 뉴스 랭킹 알고리즘을 구현

SQL

SQL에서 해커 뉴스 랭킹 알고리즘을 구현

폴 그레이엄 해커 뉴스의 순위 알고리즘을 설명하는 방법은 다음과 같습니다

나는 다음과 같은 테이블에 주어진 순수한 MySQL의에서 그렇게하고 싶습니다 :

투표 필드의 아이디어는 투표가 폐지 될 수 있다는 것이다. 순위, 투표의 목적 = 0은 전혀 투표에 해당합니다. (모든 투표 upvotes가 downvotes 같은 것은 없습니다.)

문제는 N postIDs가, 폴 그레이엄의 공식으로 분류 상단을 반환하는 쿼리를 만드는 방법입니다. 약 100,000 게시물은 당신이 필요합니다 점수 또는 아무것도의 캐싱 생각하는 경우 모두 그래서, 나는 그것에 대해 조언을 듣고 싶네요있다.

(물론 이것은 로켓 과학이 아니다 나는 확실히 그것을 알아낼 수 있지만 난 그냥 그것을 아침 식사, 점심 식사, 저녁 식사를 위해 SQL을 먹는 생각 된 사람을 줄줄 할 수있다. 그리고 StackOverflow에 볼 수있는 귀중한 것 같다.)

관련 질문 :

해결법

  1. ==============================

    1.테스트되지 않은 :

    테스트되지 않은 :

      SELECT x.*
        FROM POSTS x
        JOIN (SELECT p.postid, 
                     SUM(v.vote) AS points
                FROM POSTS p
                JOIN VOTES v ON v.postid = p.postid
            GROUP BY p.postid) y ON y.postid = x.postid
    ORDER BY (y.points - 1)/POW(((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(x.timestamp))/3600)+2, 1.5) DESC
       LIMIT n
    
  2. ==============================

    2.

    $sql=mysql_query("SELECT * FROM news 
                             ORDER BY ((noOfLike-1)/POW(((UNIX_TIMESTAMP(NOW()) - 
                             UNIX_TIMESTAMP(created_at))/3600)+2,1.5)) DESC 
                     LIMIT 20");
    

    내가 HN 같은 홈 페이지를 만들 수 있도록이 코드는 작동합니다.

    뉴스 : 테이블 이름입니다.

    noOfLike :이 뉴스와 같은 사용자의 총 #.

    created_at : 타임 스탬프 그 뉴스가 게시 된 때

  3. from https://stackoverflow.com/questions/3783892/implementing-the-hacker-news-ranking-algorithm-in-sql by cc-by-sa and MIT license