看到的老问题
表架构
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
我想获取在任一表中输入的任何特定(或用户)的条目总数。
中的一个条目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
第二次尝试是生成一些相关的输出,但它包含nick
两个表中出现的所有输出的双重条目。
此外,我不想计算两次,即插入第一个查询中的那些条目/磁铁。这就是第二个UNION
语句正在做的事情。它从两个表中获取所有值。
SQL 小提琴链接
这是指向 SQL Fiddle 的链接以及随机填充的条目。
我真的希望有人能指导我完成这个。如果有任何帮助,我将使用 PHP 来最终显示数据。所以,我最后的手段是在 PHP 中嵌套循环以进行计数(我目前正在这样做)。
期望的输出
应该在小提琴上生成的输出应该是:
************************************************
** Nick ||| Count **
************************************************
** Nick1 ||| 10 **
** Nick2 ||| 9 **
** Nick3 ||| 6 **
** Nick4 ||| 10 **
************************************************