2011-09-05 66 views
0

当满足以下条件时,下面的查询从MySQL表“comment”中总结points修改具有左连接和内连接的查询

  1. 找到l.username = '$profile'时的loginid

  2. 发现所有submissionid都有上面#1的loginid

  3. 找到所有commentid与上面#2的submissionid s,并将相应的points相加。

现在,我怎么能做出一个不同的查询来返回上面#3中所有comment的数组而不是总结point

这里所涉及的MySQL表:

登录:

logind username created activated

提交:

submissionid loginid

评论:

commentid submissionid points comment

查询:

SELECT 
    l.loginid, 
    l.username, 
    l.created, 
    l.activated, 
    COALESCE(scs.total, 0) AS commentsreceivedvalue 

FROM login l  


LEFT JOIN (
    SELECT S2.loginid, SUM(C2.points) AS total 
FROM submission S2 
INNER JOIN comment C2 
ON S2.submissionid = C2.submissionid 
GROUP BY S2.loginid 
) scs ON scs.loginid = l.loginid 


WHERE l.activated = 1 
AND l.username = '$profile' 


GROUP BY l.loginid 
ORDER BY commentsreceivedvalue DESC 

回答

0

是不是很简单:

SELECT l.loginid, l.username, l.created, l.activated, scs.commentid, scs.comment 
    FROM login AS l 
    LEFT JOIN (SELECT S2.loginid, c2.commentid, c2.comment 
       FROM submission AS S2 
       JOIN comment AS C2 ON S2.submissionid = C2.submissionid 
      ) AS scs ON scs.loginid = l.loginid 
WHERE l.activated = 1 
    AND l.username = '$profile' 
ORDER BY scs.commentid DESC; 

外GROUP BY在原来没有做什么有用的东西。原文中的ORDER BY在这里由与注释ID相反的顺序代替,这是对反向时间顺序(最近的第一个换句话说)的近似值。