2011-06-02 100 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