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
A parte complicada são as duas chamadas de soma - Se o campo de votação for
1
, então vote=1
que avalia como TRUE, que o MySQL converterá em um inteiro 1 para os propósitos do SUM(). Se não for 1, ele será avaliado como false, que será convertido em 0 e não fará nada para o SUM(). opa, precisa ter
GROUP BY list_items.item.id
no final.