我有下表叫投票:
我正在尝试使用用户表和此投票表加入项目列表。
SELECT list_items.item_id, text, date_added, username
FROM list_items
NATURAL JOIN users, votes
WHERE list_id = 3
那个问题给了我这个:
我想获得每个list_item的总投票数,以及up_votes
的列和down_votes
的列。当然,我不希望item_id像那样重复。
我尝试将SUM与IF结合,如Nettuts+视频中所述,但教程太简单了。
编辑:这是list_items表:
答案 0 :(得分:1)
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
棘手的部分是两个求和调用 - 如果投票字段为1
,则vote=1
的计算结果为TRUE,为了SUM(),MySQL将转换为整数1 。如果它不是1,那么它的计算结果为false,它被转换为0并且不对SUM()做任何事情。
哎呀,需要
GROUP BY list_items.item.id
最后。
答案 1 :(得分:0)
尝试:
SELECT li.item_id, li.text, li.date_added, u.username,
SUM(IF(v.vote = 1, 1, 0)) up_votes,
SUM(IF(v.vote = -1, 1, 0)) down_votes,
COUNT(v.vote) total_votes
FROM list_items li
INNER JOIN users u ON li.user_id = u.id
INNER JOIN votes v ON li.item_id = v.item_id
WHERE li.list_id = 3
GROUP BY li.item_id
假设用户ID的列在用户表上名为id
。