0

我在底部添加了数据库结构

我正在为招聘机构制定排名系统。我在不同的表格中捕获所有申请人的详细信息,并通过比较候选人的数据对他们进行排名(如果它们符合某个招聘广告的需求/要求)在数据库中到 job_advert 表中的作业。然后显示 10 名最佳排名(合格)候选人的列表,他们将收到一份通知,表明他们有资格获得该职位。

我从数据库中获取候选人数据,如下所示:

class ranking_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    function age() {
        $sql = "SELECT * FROM membership";
        $query = $this->db->query($sql)->result();
        foreach ($query as $row) {
            $id = $row->id_number;
            $dobs = substr($id, 0, 6);
            $dob = str_split($dobs, 2);
            $day = date('d', mktime(0, 0, 0, 0, $dob[2], 0));
            $month = date('m', mktime(0, 0, 0, $dob[1] + 1, 0, 0));
            $year = date('o', mktime(0, 0, 0, 0, 0, $dob[0] + 1));
            $date = "$day/$month/$year";
            //explode the date to get month, day and year
            $date = explode("/", $date);
            //get age from date or birthdate
            $age = (date("md", date("U", mktime(0, 0, 0, $date[0], $date[1], $date[2]))) > date("md") ? ((date("Y") - $date[2]) - 1) : (date("Y") - $date[2]));
        }
        return $age;
    }

    function job_experience() {
        $sql = "SELECT * FROM  job_list 
        JOIN job_history
        ON job_list.job_history_id = job_history.job_history_id";
        $query = $this->db->query($sql)->result();

        foreach ($query as $row) {
            $start = $row->start_date;
            $end = $row->end_date;

//            //explode the date to get month, day and year
            $start = explode("-", $start);
            $end = explode("-", $end);
//            //get age from date or birthdate
            $exp_in_years = (date("md", date("U", mktime(0, 0, 0, $start[2], $start[1], $start[0]))) > date("md", mktime(0, 0, 0, $end[2], $end[1], 0)) ? ((date("Y", mktime(0, 0, 0, 0, 0, $end[0])) - $start[0])) : (date("Y", mktime(0, 0, 0, 0, 0, $end[0])) - $start[0]));
        }

        return $exp_in_years;


    }

    function location() {
        $sql = "SELECT * FROM personal";
        $query = $this->db->query($sql)->result();

        foreach ($query as $row) {
            $city = $row->city;
        }
        return $city;
    }

    function relocate() {
        $sql = "SELECT * FROM personal";
        $query = $this->db->query($sql)->result();

        foreach ($query as $row) {
            $relocate = $row->relocate; //are you willing to relocate yes/no
        }
        return $relocate;
    }

    function get_personal() {
        $this->db->select('*');
        $this->db->from('membership');
        $this->db->join('personal', 'membership.id_number = personal.id_number');
        $query = $this->db->get()->result();

        foreach ($query as $row) {
            $row->id_number;
            $row->firstname;
        }
        return $query;
    }

和这样的广告细节:

    function get_advert() {
        $sql = "SELECT * FROM job_advert";
        $query = $this->db->query($sql)->result();
        foreach ($query as $row) {

            $job_id = $row->job_id;
            $job_title = $row->job_title;
            $salary_offered = $row->salary_offered;
            $is_negotiable = $row->negotiable;
            $company_location = $row->company_location;
            $experience = $row->required_experience;
            $age = $row->age;
        }
    }

}

现在我不知道如何将候选人数据与我从 job_adverts 表中获得的数据进行比较。我真的不知道。任何形式的帮助将不胜感激。

数据库结构

粗体PK斜体是FK

会员资格(id_number,名字,姓氏,用户名,电子邮件,电话,密码,角色,Reg_time,已激活);

个人(person_id,地址,城市,执照,,id_number性别,搬迁,minimum_salary,prefered_salary,contract_type);

job_list( job_list_id, job_history_id, start_date, end_date, 收入, company_name, industry_type, reason_for_leaving, job_title);

工作历史(job_history_idid_number);

job_advert(advert_id,job_title,job_description,start_date,end_date,salary_offered,可协商,福利,company_location,required_experience,年龄);

我在数据库中有更多表,但这些是我用于排名的表。

4

3 回答 3

1

我不确定您正在使用多少数据,但是从您的数据库中提取所有数据并将其存储在本地 php 变量中似乎是个坏主意。

你的数据库结构看起来真的很糟糕......将尽可能多的数据存储到成员表中......无需将其拆分为一堆表,除非该表获得大量列或其字段一个人可以有多个数据点。这方面的一个例子是以前的雇主......我将如何解决这个问题是创建一个名为 membersData 的链接/连接表,其中 membersDataType = 'employeer'

如果我要解决这个问题,我会做以下事情......

1) 创建一个显示所有招聘信息的 html 表单。当您从下拉列表中选择一项工作时,它会提交表单和 job_id。

2)从数据库中为该job_id选择作业数据

3)构建一个匹配每个条件的查询

$query = "SELECT * FROM members WHERE";
if ($job["age"]){ $query .= " age > ".$job["age"]; }
于 2013-07-18T12:18:39.873 回答
0

那会很有趣:)

我想最简单的是$exp_in_years > $experience($salary_offered >= $salary_asked_for) OR $is_negotiable- 但即使在那里,您也可能需要包括低于这些限制的几个 % ($exp_in_years * 0.9) > $experience

$job_title: 可能需要一个非常好的命名方案和一些非常宽容的检查

$company_location:我建议使用网络服务来计算公司位置和申请人位置之间的距离 - 但我还没有这样做,所以无法提供详细信息,sry。

然而......尽管所有自动化......你可能仍然需要人工过滤,所以我宁愿给他们更多的候选人而不是仅仅因为一个“小”测试在某个地方失败而消除完全合适的候选人......

于 2013-07-18T12:20:14.087 回答
0

虽然没有贴出数据库结构,但是可以尝试在表之间建立关系。您可以将一组候选人与 job_advets 中的一些记录相关联。在招聘过程中,一些候选人根据经验会与公司的某些职位兼容或不兼容。因此,每个候选人的 job_experience 函数都必须确定他申请的特定工作是否兼容。

于 2013-07-18T12:17:04.007 回答