我有一个submissions
表,其中包含type
tip
或request
的提交。
我正在尝试获取特定用户的所有提交内容(在其信息中心上显示为所有活动的汇总)。
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)
我提出了一个有效的查询并向我提供了用户提交的数量,但因为每次提交(返回的行)都会将类型保存为tip
或request
。所以我现在想弄清楚如何汇总这些信息。
我的查询返回所有tip
的用户。我也试图为request
做一个。
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;
答案 0 :(得分: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过滤器。