2010-08-05 4 views
0

J'utilise des tables MySQL. Leurs structures sont énumérées ci-dessous.Ajout d'un autre paramètre à une requête de jointure

"login":

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

Chaque utilisateur dispose d'un loginid

"soumission":

submissionid loginid title slug url displayurl datesubmitted 

Dans le tableau de présentation ci-dessus, la "loginid" est le loginid du utilisateur qui a soumis la soumission.

"commentaire":

commentid loginid submissionid comment datecommented 

Dans le tableau de commentaire ci-dessus, "loginid" est le loginid de l'utilisateur qui a fait le commentaire. "submissionid" est la soumission sur laquelle le commentaire a été fait.

La requête ci-dessous classe les 25 premiers login par (date de création du loginid) + (total des soumissions par le loginid) * 10 + (commentaires du loginid).

Je voudrais inclure un autre facteur: (nombre total de commentaires sur submissionids fait que le loginid a soumis) * 10.

Il exige ce qui suit:

  1. Obtenir tous submissionids dans le tableau « soumission » pour une donnée loginid
  2. le nombre total Résumant d'entrées dans la table « commentaire » qui ont ces submissionids

Ho w je peux faire ça?

Merci à l'avance,

John

$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"; 

Répondre

0

Présentez-le ci-dessous dans votre requête comme jointure supplémentaire et comprennent le total * 10 dans le calcul de votre totalscore2.

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 
Questions connexes