我在底部添加了数据库结构
我有一个招聘机构的排名系统.. 我通过将数据库中的候选数据与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 itacic是 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,income,company_name,industry_type,reason_for_leaving,job_title);
job_history( job_history_id
, id_number
);
job_advert( advert_id
,job_title,job_description,start_date,end_date,salary_offered,negotiable,benefits,company_location,required_experience,age);
我在数据库中有更多表,但这些是我用于排名的表。
答案 0 :(得分:1)
我不确定您使用了多少数据,但从数据库中删除所有数据并将其存储在本地php变量中似乎是一个坏主意。
您的数据库结构似乎都很糟糕....尽可能多地将数据存储到成员表中......除非该表获取大量列或者表,否则无需将其拆分为一堆表它是一个人可以有多个数据点的字段。这方面的一个例子是先前的雇主...我将如何处理这个问题是创建一个名为membersData的链接/连接表,其中包含membersDataType ='employeer'
如果我要解决这个问题,我会做以下事情......
1)创建一个显示所有职位发布的html表单。当您从下拉列表中选择其中一个作业时,它会提交表单和job_id。
2)从db为该job_id
选择作业数据3)构建一个匹配每个标准的查询
$query = "SELECT * FROM members WHERE";
if ($job["age"]){ $query .= " age > ".$job["age"]; }
答案 1 :(得分:0)
虽然您尚未发布数据库结构,但可以尝试在表之间创建关系。您可以将一组候选人与来自job_advets的一些记录相关联。在招聘过程中,一些依赖经验的候选人将与公司的某些职位兼容或不兼容。因此,每位候选人的工作经验功能必须确定他所申请的特定工作是否兼容。
答案 2 :(得分:0)
那会很有趣:)
我认为最简单的是$exp_in_years > $experience
和($salary_offered >= $salary_asked_for) OR $is_negotiable
- 但即便如此,您可能需要在这些限制($exp_in_years * 0.9) > $experience
之下加入几个百分点。
$job_title
:可能需要非常好的命名方案和一些非常宽容的检查
$company_location
:我建议使用网络服务来计算公司位置和申请人位置之间的距离 - 但我还没有这样做,所以无法提供细节,sry。< / p>
然而......尽管有所有自动化...你可能仍然需要人类来过滤,所以我宁愿给他们更多的候选人,而不是因为一个“小”测试在某个地方失败而消除完全合适的候选人。 ..