Ceci est une requête qui est exécutée sans problème avec MySql 5.0.51:requête SQL avec 2 groupant
SELECT cc_split.idSplit,
count(voteup.vote),
count(votedown.vote)
FROM cc_split
LEFT JOIN cc_split_usager AS voteup ON voteup.idSplit = cc_split.idSplit
AND voteup.vote >0
LEFT JOIN cc_split_usager AS votedown ON votedown.idSplit = cc_split.idSplit
AND votedown.vote <0
WHERE cc_split.isArchived = false
GROUP BY cc_split.idSplit
LIMIT 0, 30
Le problème est avec le comte qui n'affiche pas ce que je voudrais avoir. Est-ce que vous pouvez voir, il faut le cc_ split_ usager et devrait compter le nombre de vote qui est positif et d'autre part compter le nombre de voix qui est négatif. Le code ci-dessus affiche le numéro 2 upvote et 2 downvote alors qu'en réalité il devrait être 2 upvote et 1 downvote. Quel est le truc pour avoir dans une seule requête SQL le nombre de upvote et downvote.
Les tableaux ressemblent:
cc_split:
-idSplit
-...
cc_split_usager:
-idSplit
-vote (can be +1 or -1)
-...
Tout soupçon pour moi?
+1 ça marche! Pouvez-vous m'expliquer pourquoi j'ai besoin d'avoir une condition dans le compte? Si vous le pouvez, je vous accepterai automatiquement comme réponse. –
COUNT ne comptera pas les valeurs NULL, donc la condition dit si plus de 1 (pour le vote en hausse) renvoie un 1 (n'importe quelle valeur ferait vraiment), sinon retourne une valeur NULL. Le CASE est équivalent à une instruction de type IF ou SWITCH en fonction de la manière dont il est utilisé. – RedFilter
C'est parce que count (voteup) et count (voté) vous donnent le même nombre que count (*), qui est le nombre de lignes dans la jointure par groupe. –