MySQL Расчет процента совпадений - PullRequest
2 голосов
/ 20 марта 2012

Я создаю сайт по подбору вакансий, используя PHP и MySQL, и я хочу иметь возможность сопоставлять кандидатов с вакансиями при отправке работы

Когда клиент отправляет работу, он может выбрать, какуюсектор, к которому относится работа, требуются ли водительские права, должен ли кандидат быть зарегистрирован SIA (Security Industry Authority) и какой уровень SIA и пара других критериев

Что я хочу иметь, когда могузадание отправлено - проверить базу данных на предмет соответствия кандидатов, а затем вернуть процент, основанный на том, сколько критериев они соответствуют

В настоящее время моя идея состоит в том, чтобы сделать x запросов к базе данных для x критериев, а затем вычислить процент,Например:

public function getJobCriteriaPercentage($job_id, $candidate_id) {
    $sector_query = $this->db->query(...);
    $driving_licence_query = $this->db->query(...);
    $sia_query = $this->db->query;
    ...
    $matches = 0;
    if($sector_query->num_rows) {
        $matches++;
    }
    ...
    $percent = ($matches / TOTAL_CRITERIA) * 100;
}

Есть ли более эффективный способ сделать это, возможно, в одном запросе MySQL?

1 Ответ

3 голосов
/ 20 марта 2012

Выполнение запроса по каждому критерию убьет ваш сервер. Почему бы не вернуть столбец с общим количеством совпадений?

EG: если ваши фильтры:

  • ColA = 'valA'
  • ColB in (1, 5, 7)
  • ColC like '%valC%'

Вы могли бы сделать что-то вроде:

select
    (ColA = 'valA') + 
    (ColB in (1, 5, 7)) + 
    (ColC like '%valC%') TotalMatches
from t
where jobId = $jobId and candidateId = $candidateID

Если вы хотите узнать конкретные совпадения, вы можете разбить его на столбцы:

select
    ColA = 'valA' ColAFilter,
    ColB in (1, 5, 7) ColBFilter,
    ColC like '%valC%' ColCFilter
from t
where jobId = $jobId and candidateId = $candidateID

Сравнения возвращают 1 для истины и 0 для ложных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...