Php 计算每个变量在表中出现的次数

Php 计算每个变量在表中出现的次数,php,mysql,Php,Mysql,基本上,我想知道是否有更好的方法来完成这项具体任务 基本上,我在db中查询“项目需求”列表——这些都是uniquer,只出现一次 然后,我搜索另一个表,以了解有多少成员具有所需的“技能-与项目需求直接相关” 通过运行第二个查询,然后将它们插入如下数组,我完全完成了我要做的事情: function countEachSkill(){ $return = array(); $query = "SELECT DISTINCT SKILL_ID, SKILL_NAME FROM PROJ

基本上,我想知道是否有更好的方法来完成这项具体任务

基本上,我在db中查询“项目需求”列表——这些都是uniquer,只出现一次

然后,我搜索另一个表,以了解有多少成员具有所需的“技能-与项目需求直接相关”

通过运行第二个查询,然后将它们插入如下数组,我完全完成了我要做的事情:

function countEachSkill(){
    $return = array();
    $query = "SELECT DISTINCT SKILL_ID, SKILL_NAME FROM PROJECT_NEEDS";
    $result = mysql_query($query) or die(mysql_error());
    $num_rows = mysql_num_rows($result);
        while($row = mysql_fetch_assoc($result)){
            $query = "SELECT COUNT(*) as COUNT FROM MEMBER_SKILLS WHERE SKILL_ID = '".$row['NEED_ID']."'";
            $cResult = mysql_query($query);
            $cRow = mysql_fetch_assoc($cResult);
            $return[$row['SKILL_ID']]['Count'] = $cRow['COUNT'];
            $return[$row['SKILL_ID']]['Name'] = $row['SKILL_NAME'];
        }   
    arsort($return);

    return $return; 

}
但是我觉得必须有一种更好的方法(也许使用某种连接?)在结果集中返回这个结果,以避免使用数组

提前谢谢


另外,我知道mysql被贬值了。这不是我的选择。你能测试一下这个查询吗

select project_needs.*,count(members_skills.*) as count  from project_needs 
inner join members_skills
on members_skills.skill_id=project_needs.skill_id Group by project_needs.skill_name, project_needs.skill_id

我已经调整了Nriddens的答案,以适应select distinct,我相信如果
SKILL\u ID
是一个主键,他的调整是可以的

function countEachSkill(){
$return = array();
$query = "
SELECT 
    COUNT(*) AS COUNT,
    PROJECT_NEEDS.SKILL_NAME,
    PROJECT_NEEDS.SKILL_ID
FROM
    (SELECT DISTINCT
        SKILL_ID, SKILL_NAME
    FROM
        PROJECT_NEEDS) AS PROJECT_NEEDS
        INNER JOIN
    MEMBER_SKILLS
ON
    MEMBER_SKILLS.SKILL_ID = PROJECT_NEEDS.SKILL_ID
GROUP BY PROJECT_NEEDS.SKILL_ID";

$result = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($result);
    while($row = mysql_fetch_assoc($result)){
        $return[$row['SKILL_ID']]['Count'] = $row['COUNT'];
        $return[$row['SKILL_ID']]['Name'] = $row['SKILL_NAME'];
    }   
arsort($return);

return $return; 

我在select distinct上进行子查询,因为我不相信您有一个带有auto inc主键的专用技能表,如果有,我就不会使用子查询。

@EdGibbs-您是否缺少项目需求和成员技能之间的连接?太对了-谢谢!我没有仔细研究这些问题。我没有时间完全回答这个问题,所以最好是删除我的评论。再次感谢-很好的回答。这不符合sql标准,根据其配置,可能在mysql实例上运行,也可能不在mysql实例上运行。这似乎有点过于复杂刚刚回到办公室--我将检查提供的答案并报告。我稍微修改了一下,row变量丢失了,我也漏掉了一个group by。我首先测试了上面的答案,结果完全符合我的预期。我很感谢你抽出时间来回答我刚回到办公室的问题——我会核对提供的答案并向你汇报。
function countEachSkill(){
$return = array();
$query = "
SELECT 
    COUNT(*) AS COUNT,
    PROJECT_NEEDS.SKILL_NAME,
    PROJECT_NEEDS.SKILL_ID
FROM
    (SELECT DISTINCT
        SKILL_ID, SKILL_NAME
    FROM
        PROJECT_NEEDS) AS PROJECT_NEEDS
        INNER JOIN
    MEMBER_SKILLS
ON
    MEMBER_SKILLS.SKILL_ID = PROJECT_NEEDS.SKILL_ID
GROUP BY PROJECT_NEEDS.SKILL_ID";

$result = mysql_query($query) or die(mysql_error());
$num_rows = mysql_num_rows($result);
    while($row = mysql_fetch_assoc($result)){
        $return[$row['SKILL_ID']]['Count'] = $row['COUNT'];
        $return[$row['SKILL_ID']]['Name'] = $row['SKILL_NAME'];
    }   
arsort($return);

return $return;