Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中mysql数据库表值的比较_Php_Mysql_Database_Codeigniter - Fatal编程技术网

php中mysql数据库表值的比较

php中mysql数据库表值的比较,php,mysql,database,codeigniter,Php,Mysql,Database,Codeigniter,我在底部添加了数据库结构 我正在为一家招聘公司建立一个排名系统。。 我在不同的表格中记录所有申请人的详细信息,并通过将数据库中的候选人数据与招聘表格中的职位进行比较,对他们进行排名(如果他们符合某个招聘广告的需求/要求)。然后显示10个排名最佳(合格)的候选人名单,并向他们发送通知,说明他们有资格获得该职位 我从数据库中获取候选人数据,如下所示: class ranking_model extends CI_Model { function __construct() {

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

我正在为一家招聘公司建立一个排名系统。。 我在不同的表格中记录所有申请人的详细信息,并通过将数据库中的候选人数据与招聘表格中的职位进行比较,对他们进行排名(如果他们符合某个招聘广告的需求/要求)。然后显示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;
        }
    }

}
现在我不知道如何将应聘者数据与我从招聘广告表中获得的数据进行比较。我真的不知道。 任何形式的帮助都将不胜感激

数据库结构

粗体PKitacic是FK

会员资格(
身份证号码
,名,姓,用户名,电子邮件,电话,密码,角色,注册时间,已激活)

个人(
身份证
,地址,城市,执照,
身份证号码
,性别,搬迁,最低工资,优先工资,合同类型)

工作列表(
工作列表id
工作历史id
,开始日期,结束日期,收入,公司名称,行业类型,离职原因,工作头衔)

作业历史(
job\u history\u id
id\u number

职位广告(
广告id
,职位名称,职位描述,开始日期,结束日期,提供的工资,可协商,福利,公司地点,要求的经验,年龄)


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

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

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

您的数据库结构似乎都很糟糕……将尽可能多的数据存储到members表中……无需将其拆分为一组表,除非该表获得了大量的列或一个人可以拥有多个数据点的字段。这方面的一个例子是以前的雇主……我的方法是创建一个名为membersData的链接/联接表,其membersDataType='employeer'

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

1) 创建一个显示所有职位公告的html表单。当您从下拉列表中选择一个作业时,它会提交表单和作业id

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

3) 生成与每个条件匹配的查询

$query = "SELECT * FROM members WHERE";
if ($job["age"]){ $query .= " age > ".$job["age"]; }

那会很有趣:)

我想最简单的是
$exp\u in_years>$exp\u experience
($salary\u offered>=$salary\u required\u)或$is\u probable
-但即使在那里,你也可能需要在这些限制下包含几%
($exp\u in_years*0.9)>$experience

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

$company\u location
:我建议使用web服务来计算公司所在地和申请人所在地之间的距离——但我还没有这样做,因此无法提供详细信息,sry


然而……尽管自动化程度很高……你可能仍然需要人工进行筛选,因此我宁愿给他们一组更大的候选对象,也不愿因为某个地方的一个“小”测试失败而淘汰完全合适的候选对象……

我想,如果你一开始使用像WEKA这样的东西,这将非常有用,也会更容易,然后,您可以找到标准并定义一个术语/条件,以便每次与该术语/条件进行比较,例如,您可以找到一个0-100指标,每次只比较db中的一个变量,然后进行排序。这是我认为最好的方式,而且非常专业(如果你不介意在数据挖掘方面弄乱一点的话)?我不介意我是否必须做数据挖掘:)是的,但事实上不是。WEKA是一个非常简单的数据挖掘工具,你在WEKA做的就是给它数据,然后根据你选择的遗传算法,你可以得到图表和结果。实际上,测量每个值的“权重”,以便向您显示哪个值更重要,这就是为什么我说如果对您想要做的事情有用。您将实际运行它,并查看必须在哪个值上进行比较。这很容易学习,只要你只需要在记事本上写或者从excel中迁移数据。如果你知道的话,你也可以用Matlab来做。对于WEKA来说,你可以从那里看到更多的东西,这似乎是一个很好的指南,而其他的指南则更好。如果你决定继续,让我知道并问我你想要什么。好吧,这似乎是一个很好的工具。但在我继续之前,我不确定WEKA和php将如何合作?我想最终创建一个表单,招聘人员也可以从列表中选择标准。所以它不会完全依赖于自动排名。但我首先想这样做,因为这是客户想要的方式…我可能也会先看看谷歌地图-但正如我所说,我真的没有这方面的经验…有很多列可以将所有数据放在一个。。我将更新我的问题以包括数据库结构