J'essaie de faire la somme ci-dessous de la somme de thumbsup moinsthumbsdown de 5 tables différentes et ensuite SUM toutes ces valeurs ensemble, ce qui fonctionne si tous les "commthumbs" renvoient une ligne, mais si un ou plusieurs des "commthumbs" n'ont pas de lignes, ils retournent une valeur null. J'ai essayé d'utiliser IFNULL comme indiqué dans le premier LEFT JOIN ci-dessous à titre d'exemple. J'ai également essayé ISNULL et COALESCE à la place d'IFNULL mais je n'arrive toujours pas à le faire fonctionner. Des suggestions sur ce que je ne fais pas bien?
SELECT
user.userID, user.username,
SUM(a.commthumbs+b.commthumbs+c.commthumbs+d.commthumbs) AS "commthumbs",
e.fixthumbs AS "fixthumbs"
FROM
user
LEFT JOIN (
SELECT
userID, IFNULL(SUM(gameCommThUp-gameCommThDown),0) AS "commthumbs"
FROM
gamecomm
GROUP BY userID) a ON a.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(fixCommThUp-fixCommThDown) AS "commthumbs"
FROM
fixcomm
GROUP BY userID) b ON b.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(replyCommThUp-replyCommThDown) AS "commthumbs"
FROM gamereply
GROUP BY userID) c ON c.userID = user.userID
LEFT JOIN (
SELECT userID, SUM(fixReplyThUp-fixReplyThDown) AS "commthumbs"
FROM fixreply
GROUP BY userID) d ON d.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(fixThUp-fixThDown) AS "fixthumbs"
FROM
fix
GROUP BY userID) e ON e.userID = user.userID
WHERE user.userID = 2;
Réponses:
0 pour la réponse № 1Essaye ça
SELECT
user.userID, user.username,
SUM(IFNULL(a.commthumbs,0)+IFNULL(b.commthumbs,0)+IFNULL(c.commthumbs,0)+IFNULL(d.commthumbs,0)) AS "commthumbs",
IFNULL(e.fixthumbs,0) AS "fixthumbs"
FROM
user
LEFT JOIN (
SELECT
userID, SUM(IFNULL(gameCommThUp,0)-IFNULL(gameCommThDown,0)) AS "commthumbs"
FROM
gamecomm
GROUP BY userID) a ON a.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(IFNULL(fixCommThUp,0)-IFNULL(fixCommThDown,0)) AS "commthumbs"
FROM
fixcomm
GROUP BY userID) b ON b.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(IFNULL(replyCommThUp,0)-IFNULL(replyCommThDown,0)) AS "commthumbs"
FROM gamereply
GROUP BY userID) c ON c.userID = user.userID
LEFT JOIN (
SELECT userID, SUM(IFNULL(fixReplyThUp,0)-IFNULL(fixReplyThDown,0)) AS "commthumbs"
FROM fixreply
GROUP BY userID) d ON d.userID = user.userID
LEFT JOIN (
SELECT
userID, SUM(IFNULL(fixThUp,0)-IFNULL(fixThDown,0)) AS "fixthumbs"
FROM
fix
GROUP BY userID) e ON e.userID = user.userID
WHERE user.userID = 2;