2010-10-08 77 views
0

以下查询运行良好。它从3个MySQL表中提取信息:登录,提交和评论。修改联接查询以向查询添加新值

它基于从这三个表中拉出的值计算创建一个名为totalScore2的值。

的MySQL表“评论”和“提交”都具有以下字段:

loginid submissionid 

在该表“提交”,每个“submissionid”只有一个入口/行,因此只有一个“ loginid“与之相关联。

在表格“comment”中,字段“submitid”可能有多个条目/行,并可能与多个“loginid”关联。

每次“评论”中的“submissionid”之一都与表“提交”中的“loginid”相关联时,我想将其作为以下等式的一个因子。我想多次像这样的时间(-10)。

我该怎么做?

由于提前,

约翰

$sqlStr2 = "SELECT 
    l.loginid, 
    l.username, 
    l.created, 
    DATEDIFF(NOW(), l.created) + COALESCE(s.total, 0) * 5 + COALESCE(scs.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 
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 
GROUP BY l.loginid 
ORDER BY totalScore2 DESC 
LIMIT 25"; 
+0

我想通了我自己。见下文。 – John 2010-10-11 09:33:24

回答

0
$sqlStr3 = "SELECT 
     l.loginid, 
     l.username, 
    l.created, 
    DATEDIFF(NOW(), l.created) + COALESCE(s.total, 0) * 5 + COALESCE(scs.total, 0) * 10 - COALESCE(nscs.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 

    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 


    LEFT JOIN (
     SELECT S2.loginid, COUNT(1) AS total 
     FROM submission S2 
     INNER JOIN comment C2 
     ON C2.submissionid = S2.submissionid 
    AND C2.loginid = S2.loginid 
     GROUP BY S2.loginid 
    ) nscs ON nscs.loginid = l.loginid 



    GROUP BY l.loginid 
    ORDER BY totalScore2 DESC 
    LIMIT 25";