2013-04-30 123 views
0

我有table1(id,name),table2(id [FK to table1.id],user_id,visit)。 對於每個table1.id,我需要顯示它在table1中的名字,統計用戶並顯示屬於這個id的user_id,當table2.visit = 1時,統計用戶並顯示他們的user_id屬於這個id,當table2.visit = 0。此外,table1中的某些id可能不在table2中,因爲這些id我想在計數器中爲0。基於mysql列和組結果遞增一個值或另一個值

結果表應該是這樣的:

id|name|count_visitors|list_of_visitors_id|count_non_visitors|list_of_non_visitors_id| 
1 |a |2    |5,10    |1     |4      | 

了,你能查詢幫助嗎?

回答

1
SELECT t1.name, 
     COALESCE(visitors.visitors_count, 0) AS `count_visitors`, 
     COALESCE(visitors.visitors_list, '') AS `list_of_visitors_id`, 
     COALESCE(nonvisitors.nonvisitors_count, 0) AS `count_non_visitors`, 
     COALESCE(nonvisitors.nonvisitors_list, '') AS `list_of_non_visitors_id` 
FROM table1 t1 
LEFT JOIN 
(SELECT id, GROUP_CONCAT(user_id) AS visitors_list, COUNT(*) AS visitors_count 
    FROM table2 
    WHERE visit = 1 
    GROUP BY id) visitors 
ON t1.id = visitors.id 
LEFT JOIN 
    (SELECT id, GROUP_CONCAT(user_id) AS nonvisitors_list, COUNT(*) AS nonvisitors_count 
    FROM table2 
    WHERE visit = 0 
    GROUP BY id) nonvisitors 
ON t1.id = nonvisitors.id 

自己嘗試一下:Sqlfiddle

如果你需要它的一個用戶只需添加一行結尾:

WHERE t1.id = 1 
+0

優秀。非常感謝你!但是我的mysql在列表中顯示NULL,當它們爲空時爲空,而在沒有時爲blob。你能提出原因嗎?舊的mysql版本?現在它是5.1.66 – Anton 2013-04-30 22:37:50

+0

對於COALESCE(sth_that_can_be_null,0),任何版本都無法顯示NULL,它的功能是什麼 - 顯示不是NULL的第一個參數。 Group_concat可能返回blob爲整數,你可以顯式地將你的id轉換爲字符串來獲得一個字符串。 – piotrm 2013-04-30 22:44:22

+0

'convert(COALESCE(visitors.visitors_list,'')using utf8)as list_of_visitors_id,'和nonvisitor的相同開始工作,就像上面的鏈接一樣! – Anton 2013-05-01 05:50:48

相關問題