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
Der schwierige Teil sind die beiden Summenaufrufe - Wenn das Abstimmungsfeld 1
ist , dann vote=1
was zu TRUE ausgewertet wird, was MySQL für die Zwecke von SUM() in eine Ganzzahl 1 umwandelt. Wenn es nicht 1 ist, wird es als falsch ausgewertet, was in eine 0 umgewandelt wird und nichts für SUM() tut.
hoppla, muss man haben
GROUP BY list_items.item.id
am Ende.