多个关系和MySQL查询

时间:2016-11-22 21:23:25

标签: php mysql database

我目前正在使用mysql和php进行数据库项目,其中一个特定的查询给我带来了巨大的麻烦。

在这个项目中,我们必须搜索分包商的技能,例如java,c ++等,并评估他们的技能等级是否与所要求的等级值相等或更高。

我们有一个类似的数据库方案:

表子:

  • sub_id
  • sub_region_id

表区域:

  • 的region_id
  • REGION_NAME

表技能:

  • skill_id也
  • skill_name

表技能:

  • skillrating_id
  • skillrating_value

表格suboskill:

  • subtoskill_id
  • subtoskill_sub_id
  • subtoskill_skill_id
  • subtoskill_raitng_id

小提取表保存了分包商与技能的N * N关系, 所以" 1,2,3,4"会说明id为2的转包商 具有id 3的技能和id为4的等级。

现在我想通过AND或OR连接查询多项技能, 例如"哪些分包商拥有技能java,其值为> = 2 AND c ++,其值为> = 4"。

OR查询工作正常(下面的代码),但AND查询给出0结果, 除非选择具有不同值的相同技能。

/*
 * selectSubsBySkill
 * search database for subcontractors with given skills and ratings
 * parameter:
 * -$skill_ids array of ids(int) of skills, same size as $ratings
 * -$ratings array of rating values(int) for skills, same size as $skill_ids
 * -$and boolean true if and connection, else or connection of skills
 * return:
 * array with matching subcontractors information
 */
public function selectSubsBySkill($skill_ids, $ratings, $and){
    if(empty($skill_ids)){
        return $this->selectSubs();
    }
    $sel = 'SELECT * FROM '.SUBS.','.REGIONS.','.SKILLS.','.SUBTOSKILL.','.SKILLRATINGS.' WHERE '.
        SUB_REGION_ID.'='.REGION_ID.' AND '.SUBTOSKILL_SUB_ID.'='.SUB_ID.' AND '.
    SUBTOSKILL_SKILL_ID.'='.SKILL_ID.' AND '.SKILLRATING_ID.'='.SUBTOSKILL_RATING_ID.' AND (';

    $i=0;
    foreach($skill_ids as $skill_id){
        $sel .= '('.SKILLRATING_VALUE.'>='.$ratings[$i].' AND '.SUBTOSKILL_SKILL_ID.'='.$skill_id.')';
        if($i<sizeof($skill_ids)-1){
            if($and)$sel .= ' AND ';
            else $sel .= ' OR ';
        }
        $i++;
    }       
    $sel .= ') GROUP BY '.SUB_ID;
    return $this->query($sel);
}

我已经尝试了其他一些例子,包括使用UNION或JOIN查询,但仍然没有任何效果。

如果有人在这里提示解决这个问题,我会很高兴。

0 个答案:

没有答案