2010-05-31 3 views
0

작동하지 않음 가입 :쿼리 제가 세 MySQL의 테이블을 사용하고

코멘트

commentid loginid submissionid comment datecommented 

로그인

loginid username password email actcode disabled activated created points 

제출이 세 개의 테이블에서

submissionid loginid title url displayurl datesubmitted 

은 "은 loginid를 "대응합니다.

"submissionid"의 수에 따라 상위 10 개의 loginids를 가져오고 싶습니다. 첫 번째 열의 "사용자 이름", 두 번째 열의 "submissionid"수 및 세 번째 열의 "commentid"수를 표시하는 3 열 HTML 표에 표시하고 싶습니다.

아래 쿼리를 사용해 보았지만 제대로 작동하지 않았습니다. 왜 어떤 생각하지? 사전에

감사합니다,

$sqlStr = "SELECT 
       l.username 
       ,l.loginid 
       ,c.commentid 
       ,count(s.commentid) countComments 
       ,c.comment 
       ,c.datecommented 
       ,s.submissionid 
       ,count(s.submissionid) countSubmissions 
       ,s.title 
       ,s.url 
       ,s.displayurl 
       ,s.datesubmitted 
      FROM comment AS c 
     INNER JOIN login AS l ON c.loginid = l.loginid 
     INNER JOIN submission AS s ON c.loginid = s.loginid 
     GROUP BY c.loginid 
     ORDER BY countSubmissions DESC 
      LIMIT 10"; 

    $result = mysql_query($sqlStr); 

$arr = array(); 
echo "<table class=\"samplesrec1\">"; 
while ($row = mysql_fetch_array($result)) { 
    echo '<tr>'; 
    echo '<td class="sitename1"><a href="http://www...com/.../members/index.php?profile='.$row["username"].'">'.stripslashes($row["username"]).'</a></td>'; 
    echo '</tr>'; 
    echo '<td class="sitename1">'.stripslashes($row["countSubmissions"]).'</td>'; 
    echo '</tr>'; 
    echo '</tr>'; 
    echo '<td class="sitename1">'.stripslashes($row["countComments"]).'</td>'; 
    echo '</tr>'; 
    } 
echo "</table>"; 

답변

1
SELECT 
    l.loginid, 
    l.username, 
    COALESCE(s.total, 0) AS numSubmissions, 
    COALESCE(c.total, 0) AS numComments 
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 numComments DESC 
+0

감사합니다 ...이 적어도 하나의 submissionid가있는 경우에만 loginids를 표시 할 것 같다. submissionid가없는 loginids를 어떻게 표시 할 수 있습니까? – John

+0

오른쪽, JOIN을 LEFT JOIN으로 바꿉니다. – nuqqsa

+1

업데이트 된 쿼리를 참조하십시오. 또한 NULL 값을 0으로 변환합니다. – nuqqsa

0
쿼리에서
select 
l.username, 
s.submissions, 
c.comments 
from 
l, 
(
    select 
    count(s.submissionid) as submissions, 
    s.loginid 
    from 
    submission s 
    group by 
    s.loginid 
) s, 
(
    select 
    count(c.commentid) as commentids, 
    c.loginid 
    from 
    comment c 
    group by 
    c.loginid 
) c 
where 
l.loginid = s.loginid and 
l.loginid = c.loginid 
order by 
s.submissions desc 
limit 
10 
1

, 당신이 제공해야합니다 등 주석 등 commentid 같은 비 그룹 항목을 선택하여 원하는 결과. 복종 INNER JOIN들 c를 메모의 NoOfComments 같은

선택 l.username, NoOfSubmissions으로 계산 (s.submissionid) (c.commentid) 카운트 c.submissionid = ON INNER s.submissionid 는 l.loginid ON 로그인 L 가입 = l.username에 의한 c.loginid 그룹 count by (s.submissionid) limit 10;

감사합니다,

Rinson KE DBA 91 + 9995044142 www.qburst.com