私が持っているsubmissions
テーブルを、それに持って提出されているtype
いずれかtip
またはrequest
。
特定のユーザーのすべての送信を取得しようとしています(ダッシュボードにすべてのアクティビティの集計として表示するため)。
例えば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)
私はその作品1つのクエリで上がってきた私に、ユーザーの提出の量を与えるが、各提出(戻ってくる行)ので、いずれかのようなタイプが保存されますtip
かrequest
。だから私は今その情報を集約する方法を理解しようとしています。
すべてtip
のを含むユーザーを返す私のクエリ。私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;
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;
あなたが持っていた2番目のクエリは近いものでした...しかし、それは特定のユーザーの合計のヒントと合計のリクエストを集約していませんでした。合計は何も計算されませんでした。つまり、GROUPBYはありませんでした。上記のクエリが役立つはずです。必要に応じて、WHEREフィルターを追加し直すこともできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加