我正在开发一个PHP应用程序以显示注册人统计信息,并且我有一个MySQL表,该表已经充满了注册人数据。列是“名称”,“组织”和“国家/地区” (没有“大陆”列)。
如何显示每个大陆的注册人数?
答案 0 :(得分:0)
首先,我建议您对表格结构进行规范化,为了进行规范化,您必须需要一个包含与国家/地区有关的所有信息的国家/地区表(continent
)。
对此进行探索: https://gist.github.com/nobuti/3816985,您将找到一个国家/地区表。
示例解决方案:
在您的结构中,您必须在这里需要2个表,一个表用于continents
,第二个表是countries
架构:
CREATE TABLE IF NOT EXISTS `continents` (
`code` CHAR(2) NOT NULL COMMENT 'Continent code',
`name` VARCHAR(255),
PRIMARY KEY (`code`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `countries` (
`code` CHAR(2) NOT NULL COMMENT 'Two-letter country code (ISO 3166-1 alpha-2)',
`name` VARCHAR(255) NOT NULL COMMENT 'English country name',
`full_name` VARCHAR(255) NOT NULL COMMENT 'Full English country name',
`iso3` CHAR(3) NOT NULL COMMENT 'Three-letter country code (ISO 3166-1 alpha-3)',
`number` SMALLINT(3) ZEROFILL NOT NULL COMMENT 'Three-digit country number (ISO 3166-1 numeric)',
`continent_code` CHAR(2) NOT NULL,
PRIMARY KEY (`code`),
KEY `continent_code` (`continent_code`),
CONSTRAINT `fk_countries_continents` FOREIGN KEY (`continent_code`) REFERENCES `continents` (`code`)
) ENGINE=InnoDB;
侧面说明::从https://gist.github.com/nobuti/3816985
获取INSERT查询此后,您可以使用INNER JOIN
解决问题,例如:
SELECT COUNT(*) as Total, co.name
FROM registrants rg
INNER JOIN countries cc ON cc.name = rg.country
INNER JOIN continents co ON co.code = cc.continent_code
GROUP BY co.name
现在,您可以获得带有洲名的注册人GROUP数量。