見られる古い質問
- 別のテーブルのレコードを照合するためにレコードの1つのテーブルをカウントする
- MySQLは複数のテーブルから一致するレコードをカウントします
- 1つのフィールドでグループ化された2つのテーブルからレコードをカウントします
テーブルスキーマ
entries
からのデータを持つテーブル2005-01-25
CREATE TABLE `entries` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`ctg` VARCHAR(15) NOT NULL,
`msg` VARCHAR(200) NOT NULL,
`nick` VARCHAR(30) NOT NULL,
`date` DATETIME NOT NULL,
PRIMARY KEY (`id`),
INDEX `msg` (`msg`),
INDEX `date` (`date`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
からの通常のデータをmagnets
含む子テーブル(その前のエントリがいくつかある可能性があります)2011-11-08
CREATE TABLE `magnets` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`eid` INT(10) UNSIGNED NOT NULL,
`tth` CHAR(39) NOT NULL,
`size` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
`nick` VARCHAR(30) NOT NULL DEFAULT 'hjpotter92',
`date` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `eid_tth` (`eid`, `tth`),
INDEX `entriedID` (`eid`),
INDEX `tth_size` (`tth`, `size`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
質問
nick
いずれかのテーブルに入力された特定の(またはユーザー)によるエントリの総数のカウントを取得したいと思います。
のエントリの1つがentries
同時に入力されmagnets
、の後続のエントリは同じまたは異なるものであるmagnets
可能性があります。nick
私のコード
1を試す
SELECT `e`.id, COUNT(1), `e`.nick, `m`.nick FROM `entries` `e` INNER JOIN `magnets` `m` ON `m`.`eid` = `e`.id GROUP BY `e`.nick
2を試す
SELECT `e`.id, COUNT(1), `e`.nick FROM `entries` `e` GROUP BY `e`.nick UNION ALL SELECT `m`.eid, COUNT(1), `m`.nick FROM `magnets` `m` GROUP BY `m`.nick
2番目の試行は、いくつかの関連する出力を生成することですnick
が、両方のテーブルに表示されるすべての2つのエントリが含まれています。
また、最初のクエリで挿入されたエントリ/マグネットを2回カウントしたくありません。これが2番目のUNION
ステートメントが行っていることです。両方のテーブルからすべての値を取り込みます。
SQLフィドルリンク
これは、ランダムに入力されたエントリとともにSQLFiddleへのリンクです。
誰かが私をこれを通して案内してくれることを本当に望んでいます。それが助けになるなら、私はデータの最終的な表示にPHPを使用します。したがって、私の最後の手段は、カウントのためにPHPでループをネストすることです(これは現在行っています)。
必要な出力
フィドルで生成される出力は次のようになります。
************************************************
** Nick ||| Count **
************************************************
** Nick1 ||| 10 **
** Nick2 ||| 9 **
** Nick3 ||| 6 **
** Nick4 ||| 10 **
************************************************