Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL查询:使用百分比匹配匹配两个表_Php_Mysql - Fatal编程技术网

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?