PHP MySQL查询:使用百分比匹配匹配两个表
我有两个“技能”表,第一个表包含员工的技能,第二个表包含公司的“技能” 员工技能表PHP MySQL查询:使用百分比匹配匹配两个表,php,mysql,Php,Mysql,我有两个“技能”表,第一个表包含员工的技能,第二个表包含公司的“技能” 员工技能表 CREATE TABLE `employee_skills` ( `e_id` int(8) NOT NULL, `skill` int(8) NOT NULL, `points` enum('0','25','50','75','100') COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`u_id`) ) ENGINE=InnoDB DEFAULT
CREATE TABLE `employee_skills` (
`e_id` int(8) NOT NULL,
`skill` int(8) NOT NULL,
`points` enum('0','25','50','75','100') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `company_skills` (
`c_id` int(8) NOT NULL,
`skill` int(8) NOT NULL,
`points` enum('0','25','50','75','100') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
表格公司技能
CREATE TABLE `employee_skills` (
`e_id` int(8) NOT NULL,
`skill` int(8) NOT NULL,
`points` enum('0','25','50','75','100') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `company_skills` (
`c_id` int(8) NOT NULL,
`skill` int(8) NOT NULL,
`points` enum('0','25','50','75','100') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
因此,如果一家公司的技能窗口得分为100分,员工得分为25分,那么匹配率为25%。我使用以下查询来获得结果:
$result = $connection->prepare("select u_id, skill, points, COUNT(points) from employee_skills");
预期结果应与特定技能相匹配,并返回与以下类似的百分比:
技能比赛
- 窗户| 25%
- linux |…%
- mac |…%
SELECT e_id, e.skill, c.skill, (e.points/c.points)*100 from employee_skills as e, company_skills as c
WHERE e.skill = c.skill
GROUP BY e.e_id,e.skill
见下文:
SELECT c.skill, total_emp_points, c.points as total,
(total_emp_points/c.points)*100 as percnt FROM company_skills AS c,
(SELECT e.skill, SUM(e.points) as total_emp_points
FROM employee_skills as e
GROUP BY e.skill) as emp
WHERE c.skill = emp.skill;
请参见您可能在寻找
总和(点数)
而不是计数
如果员工技能大于公司技能,您想要100%还是125%左右,150%我希望百分比低于100%个存储点作为int。如果Minesh的答案不是你想要的,考虑提供一个相同的字串。@ Jasnb请注意,如果你想利用SUM()函数,你需要改变点的数据类型来删除EnUM并使用int。谢谢你的回答!我用SqlFiddle做了一些尝试,但如果一家公司的技能得分为100分,而一名员工的技能得分为75分,那么查询将返回125分,而不是75分匹配。@JasonB您是在根据公司积分查找员工总数%还是员工总数%?在本例中,我是在根据公司积分查找员工总数%points@JasonB总员工还是平均员工?因为如果员工A得到75/100,员工B得到50/100,那么总数将是125/100,或者您需要平均值(75+50/2)/100=62.5?