SELECT list_items.text, list_items.item_id, SUM(votes.vote=1) AS upvote, SUM(votes.vote=-1) AS downvote
FROM list_items
LEFT JOIN votes ON list_items.item_id = votes.item_id
La partie délicate sont les deux appels de somme - Si le champ de vote est 1
, puis vote=1
qui s'évalue à TRUE, que MySQL convertira en entier 1 pour les besoins de SUM(). Si ce n'est pas 1, alors il est évalué à false qui est converti en 0 et ne fait rien pour SUM().
oups, il faut avoir
GROUP BY list_items.item.id
à la fin.