2010-05-31 54 views
0

我用三个MySQL表:加入查询不能

评论

commentid loginid submissionid comment datecommented 

登录

loginid username password email actcode disabled activated created points 

提交

submissionid loginid title url displayurl datesubmitted 

在这三个表中,“登录ID “对应。

我想根据“submissionid”的数量拉前10名loginids。我想将它们显示在一个3列的HTML表格中,该表格显示了第一列中的“用户名”,第二列中的“submissionid”的数量以及第三列中的“commentid”的数量。

我尝试使用下面的查询,但它没有奏效。任何想法为什么不呢?

由于提前,

约翰

$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代表登录ID。我怎么能显示没有submitidsids的loginids? – John 2010-05-31 14:38:16

+0

正确,然后用左连接替换JOIN。 – nuqqsa 2010-05-31 14:44:57

+1

请参阅更新后的查询,它还包含将NULL值转换为0. – nuqqsa 2010-05-31 14:52:09

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,评论等 这应该得到期望结果。

选择l.username,计数(s.submissionid)作为NoOfSubmissions,计数(c.commentid),如从注解C1 INNER JOIN提交小号NoOfComments ON c.submissionid = s.submissionid INNER JOIN登录升ON l.loginid = c.loginid group by l.username order by count(s.submissionid)limit 10;

感谢,

Rinson KE DBA 91 + 9995044142 www.qburst.com