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