在MySQL中加入两个表

时间:2011-07-13 20:52:55

标签: mysql sql

我有下表叫投票:

Votes

我正在尝试使用用户表和此投票表加入项目列表。

      SELECT list_items.item_id, text, date_added, username 
        FROM list_items 
NATURAL JOIN users, votes 
       WHERE list_id = 3

那个问题给了我这个:

SQL Query Preformed

我想获得每个list_item的总投票数,以及up_votes的列和down_votes的列。当然,我不希望item_id像那样重复。

我尝试将SUM与IF结合,如Nettuts+视频中所述,但教程太简单了。

编辑:这是list_items表: list_items

2 个答案:

答案 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