2011-06-02 92 views
1

+给出,并得到票我有一个将数据写入这种格式的投票表:组在相同的输出

id_user|id_user2|value 
1|2|-1 
1|3|1 
5|3|1 
2|1|-1 

id_user是用户谁投赞成票,id_user2是用户谁得到投票和价值表示,如果他得到正面或反面投票。那么和我的问题是,我想展示如何让每个用户在同一输出中给予和获得投票。下面是我怎么想从上面输入看起来输出:

id_user|given|gotten 
1|0|-1 
2|-1|-1 
3|0|2 
5|1|0 

我不知道如何做到这一点,我只知道我怎么能有两个单独的查询表明这一点。在这种情况下,这将是:

SELECT id_user2,SUM(value) FROM `table` GROUP BY id_user2 

SELECT id_user,SUM(value) FROM `table` GROUP BY id_user 

回答

1

只需加入查询:

SELECT 
    gotten.id_user, 
    gotten.gotten, 
    given.given 
FROM 
(
    SELECT 
    id_user2 AS id_user, 
    SUM(value) AS gotten 
    FROM 
    table 
    GROUP BY 
    id_user2 
) gotten 
JOIN -- Join the current row with rows verifying... 
(
    SELECT 
    id_user, 
    SUM(value) AS given 
    FROM 
    table 
    GROUP BY 
    id_user 
) given ON given.id_user = gotten.id_user -- ... this is the same user. 

注:如果用户没有给予或没有得到选票,它不会为他返回任何东西。如果您需要这些案例的结果,则即使在左右表格中没有与您的条件匹配的行,也可以使用完整的外部联接进行联接。

SELECT 
    gotten.id_user, 
    gotten.gotten, 
    given.given 
FROM 
(
    SELECT 
    id_user2 AS id_user, 
    SUM(value) AS gotten 
    FROM 
    table 
    GROUP BY 
    id_user2 
) gotten 
FULL OUTER JOIN -- Join the current row with rows verifying... 
(
    SELECT 
    id_user, 
    SUM(value) AS given 
    FROM 
    table 
    GROUP BY 
    id_user 
) given ON given.id_user = gotten.id_user -- ... this is the same user. 

如果没有给定或得到的选票,您将得到空值。

+0

“AS id_user”后面缺少逗号,但用此更正此工作。 – gadelat 2011-06-02 23:16:08

+0

这是不可能的工作在MySQL中,没有完整的外部联接,逗号缺少,表没有反拨为保留字,没有完整的外部联接,它将只选择有投票和有票的用户。 – piotrm 2011-06-02 23:22:07

+0

@piotrm:您可以使用两个外部联接(右侧和左侧)获取完整的外部联接。我没有看到任何昏迷的昏迷。 – 2011-06-03 00:33:09