每个人的计数技能
Counting skill for each person
我正在尝试创建维恩图。我已经有了使用 d3js 的 javascript。我现在需要的是以下内容。
有3张桌子
Person (id_person, name_person)
Skill (id_skill, name_skill)
Person_Skill(id_person, id_skill)
如何计算 id_skill( 和 sql)每个子集的人数?
我已经编写了这个 php 脚本来创建所有 id_skill
function powerSet($in, $minLength = 1) {
$count = count($in);
$members = pow(2,$count);
$return = array();
for ($i = 0; $i < $members; $i++) {
$b = sprintf("%0".$count."b",$i);
//$out = array();
$member = '';
for ($j = 0; $j < $count; $j++) {
if ($b{$j} == '1') $member .= $in[$j]. ",";
}
if($member != '') $out = $member;
if (count($out) >= $minLength) {
$return[] = $out;
}
}
return $return;
}
例子
Skill
id_skill name_skill
1 PHP
2 SQL
Person
id_person name_person
1 'Name1'
2 'Name2
Person_Skill
id_person id_skill
1 1
1 2
2 1
For the set of id_skill {1} => count = 1 (because only person 2 knows just this)
For the set of id_skill {2} => count = 0 (because person 1 also knows skill 1)
For the set of id_skill {1, 2} => count = 1 (person 1 knows both)
我不喜欢使用 IN CLAUSE 匹配所有 ID。数据库是 MYSQL
您可以使用聚合字符串连接为每个人生成一组 ID。然后你可以数一数。
每个数据库都有不同的聚合字符串连接方式。以下显示了针对此的 MySQL 查询:
select skills, count(*) as cnt
from (select sk.id_person, group_concat(distinct sk.id_skill order by sk.id_skill) as skills
from person_skill sk
group by sk.id_person
) ps
group by skills;
我正在尝试创建维恩图。我已经有了使用 d3js 的 javascript。我现在需要的是以下内容。
有3张桌子
Person (id_person, name_person)
Skill (id_skill, name_skill)
Person_Skill(id_person, id_skill)
如何计算 id_skill( 和 sql)每个子集的人数?
我已经编写了这个 php 脚本来创建所有 id_skill
function powerSet($in, $minLength = 1) {
$count = count($in);
$members = pow(2,$count);
$return = array();
for ($i = 0; $i < $members; $i++) {
$b = sprintf("%0".$count."b",$i);
//$out = array();
$member = '';
for ($j = 0; $j < $count; $j++) {
if ($b{$j} == '1') $member .= $in[$j]. ",";
}
if($member != '') $out = $member;
if (count($out) >= $minLength) {
$return[] = $out;
}
}
return $return;
}
例子
Skill
id_skill name_skill
1 PHP
2 SQL
Person
id_person name_person
1 'Name1'
2 'Name2
Person_Skill
id_person id_skill
1 1
1 2
2 1
For the set of id_skill {1} => count = 1 (because only person 2 knows just this)
For the set of id_skill {2} => count = 0 (because person 1 also knows skill 1)
For the set of id_skill {1, 2} => count = 1 (person 1 knows both)
我不喜欢使用 IN CLAUSE 匹配所有 ID。数据库是 MYSQL
您可以使用聚合字符串连接为每个人生成一组 ID。然后你可以数一数。
每个数据库都有不同的聚合字符串连接方式。以下显示了针对此的 MySQL 查询:
select skills, count(*) as cnt
from (select sk.id_person, group_concat(distinct sk.id_skill order by sk.id_skill) as skills
from person_skill sk
group by sk.id_person
) ps
group by skills;