2014-01-25 57 views
0

我有一張submissions桌子,其中有typetiprequest試圖在一張桌子內獲得2筆加入加入

我試圖抓住一個特定用戶的所有提交(顯示爲他們的儀表板上所有活動的聚合)。

E.g. You have submitted: 5 requests and 1 tip

我的提交創建表看起來像這樣:

 Table: submissions 
Create Table: CREATE TABLE `submissions` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) NOT NULL, 
    `slug` varchar(255) NOT NULL, 
    `description` mediumtext NOT NULL, 
    `user_id` int(11) NOT NULL, 
    `created` datetime NOT NULL, 
    `type` enum('tip','request') NOT NULL, 
    `thumbnail` varchar(64) CHARACTER SET latin1 DEFAULT NULL, 
    `removed` tinyint(1) unsigned NOT NULL DEFAULT '0', 
    `keywords` varchar(255) NOT NULL, 
    `ip` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user_id` (`user_id`), 
    FULLTEXT KEY `search` (`title`,`description`,`keywords`) 
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 
1 row in set (0.00 sec) 

,我想出了一個查詢工作,並給我的用戶提交的內容量,但是因爲每個提交(一行回來)保存鍵入tiprequest。所以我想弄清楚如何彙總這些信息。

我的查詢返回用戶所有tip s。我正在嘗試爲request s做一個。

SELECT users.*, count(submissions.id) 
AS "tipsCount" 
FROM users 
LEFT JOIN submissions on users.id = submissions.user_id 
WHERE username = 'blahbster' 
AND submissions.type = 'tip' 
ORDER BY submissions.created DESC 
LIMIT 1; 

也許我可以在這裏使用一筆款項?我嘗試:

SELECT users.*, 
SUM(case when type = 'tip' then 1 else 0 end) as "tipsCount" 
SUM(case when type = 'request' then 1 else 0 end) as "requestsCount" 
FROM users 
LEFT JOIN submissions on users.id = submissions.user_id 
WHERE username = 'blahbster' 
ORDER BY submissions.created DESC 
LIMIT 1; 

回答

2
SELECT a.username, b.type, 
SUM(case when b.type = 'tip' then 1 else 0 end) as "tipsCount", 
SUM(case when b.type = 'request' then 1 else 0 end) as "requestsCount" 
FROM users as a 
LEFT JOIN submissions as b 
ON a.id = b.user_id 
GROUP BY a.username, b.type; 

你有第二個查詢接近...但它沒有聚合特定用戶的總數提示和總的要求。總和沒有計算任何東西,即沒有GROUP BY。上面的查詢應該有所幫助。如果你需要的話,顯然你可以添加WHERE過濾器。

+1

歡迎來到SO! – Strawberry

+0

非常好。謝謝你解釋我需要什麼。 –