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, 性別, 移転, 最低給与, 希望給与, 契約タイプ);

job_list( job_list_id, job_history_id, start_date, end_date, 収入, company_name, industry_type, reason_for_leave, job_title);

job_history( job_history_id, id_number);

job_advert( advert_id, job_title, job_description, start_date, end_date, 給与_offered, 応相談, 福利厚生, company_location, required_experience, age);

データベースには他にもテーブルがありますが、これらはランキングに使用するものです。

4

3 に答える 3

1

作業しているデータの量はわかりませんが、データベースからすべてを取り出してローカルのphp変数に保存するのは悪い考えのようです。

あなたのデータベース構造はすべて本当に悪いようです....メンバーテーブルにできるだけ多くのデータを保存します...そのテーブルが大量の列またはそのフィールドを取得していない限り、それをテーブルの束に分割する必要はありません人が複数のデータポイントを持つことができること。これの例は以前の雇用主です...私がこれにアプローチする方法は、membersDataType = 'employeer' で membersData と呼ばれるリンク/結合テーブルを作成することです

この問題にアプローチする場合、次のことを行います...

1) すべての求人情報を表示する HTML フォームを作成します。ドロップダウンからジョブの 1 つを選択すると、フォームと 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 > $experienceand($salary_offered >= $salary_asked_for) OR $is_negotiableだと思いますが、それでもおそらくこれらの制限よりも数% 少なくする必要があります($exp_in_years * 0.9) > $experience

$job_title: おそらく、非常に優れた命名スキームと、非常に寛容なチェックが必要になるでしょう。

$company_location: 会社の場所と応募者の場所の間の距離を計算する Web サービスを使用することをお勧めしますが、まだそれを行っていないため、詳細についてはお答えできません。

それでも...すべての自動化にもかかわらず...おそらく人間がフィルタリングする必要があるので、どこかで失敗した1つの「小さな」テストのために完全に適切な候補を排除するよりも、より多くの候補を与える方がよいでしょう...

于 2013-07-18T12:20:14.087 に答える