2010-08-05 3 views
0

일부 MySQL 테이블을 사용하고 있습니다. 그 구조는 다음과 같습니다.조인 쿼리에 다른 매개 변수 추가

"로그인"

loginid username password email actcode disabled activated created points website location age gender 

각 사용자는은 loginid을 갖는다

"제출"

상기 제출 테이블에서
submissionid loginid title slug url displayurl datesubmitted 

상기 "은 loginid"는의은 loginid 인 제출 한 사용자.

"코멘트": 위의 코멘트 테이블에서

commentid loginid submissionid comment datecommented 

는, "은 loginid"는 코멘트를 한 사용자의은 loginid입니다. "submissionid"는 의견이 제출 된 제출물입니다.

아래의 쿼리는 loginid가 존재하는 일수 + loginid에 의한 전체 제출 수 * 10 + loginid에 의한 의견별로 상위 25 개의 loginids를 순위 지정합니다.

나는 또 하나의 요인 포함시킬

:

  1. 테이블의 모든 submissionids 얻기 : 그것은 다음이 필요 (10)

    *합니다 (은 loginid 제출했다고 submissionids에 만든 총 의견) 주어진에 대한 "제출"그 submissionids이 테이블 "코멘트"에있는 항목의 총 수를 합산

  2. 을은 loginid

호 내가 할 수 있을까? 사전에

감사합니다,

$sqlStr2 = "SELECT 
    l.loginid, 
    l.username, 
    l.created, 
    DATEDIFF(NOW(), l.created) + COALESCE(s.total, 0) * 10 + COALESCE(c.total, 0) AS totalScore2 
FROM login l  
LEFT JOIN (
    SELECT loginid, COUNT(1) AS total 
    FROM submission 
    GROUP BY loginid 
) s ON l.loginid = s.loginid 
LEFT JOIN (
    SELECT loginid, COUNT(1) AS total 
    FROM comment 
    GROUP BY loginid 
) c ON l.loginid = c.loginid 
GROUP BY l.loginid 
ORDER BY totalScore2 DESC 
LIMIT 25"; 

답변

0

가입 추가로 질의에 아래에 소개 한 다음 totalscore2 계산에 총 * (10)를 포함한다.

LEFT JOIN (
    SELECT S2.loginid, COUNT(1) AS total 
    FROM submission S2 
    INNER JOIN comment C2 
    ON C2.submissionid = S2.submissionid 
    GROUP BY S2.loginid 
) scs ON scs.loginid = l.loginid 
관련 문제