Я пытаюсь выполнить поиск по приложению CV, информация о CV хранится во многих таблицах, и я пытаюсь найти резюме, содержащее определенную информацию, такую как (квалификации и образование).
Итак, я отправил критерии поиска через POST:
$ _POST [‘qualifications’] = массив (5,9) и
$ _POST [‘educations’] = array (13);
и я хочу найти резюме, в котором есть только эта информация.
таблицы выглядят так:
таблица cv_qualification: идентификатор, резюме_ид, квалификация_ид.
таблица cv_educations: id, resume_id, educations_id.
Я пытался использовать (WHERE IN заявления): квалификации
select * FROM cv_qualifications where qualifications_id IN (19,5);
select * FROM cv_educations where educations_id IN (13);
но эти заявления приносят все резюме, которые имеют qualification_id 19 или же qualification_id 5 или же educations_id = 13.
Спасибо за ваше время.
Это мой код:
$keys = array_keys($_POST);
$found = array();
foreach ($keys as $key) {
$found[$key] = DataBase::query("SELECT * FROM cv_" . $key . " WHERE " . $key . "_id IN (?)", array($_POST[$key]));
}
echo count($found)."\n";
print_r($found)."\n";
Предполагая, что в обеих таблицах используется общий файл resume_id, вы можете использовать его для объединения ваших таблиц в один запрос, который будет:
SELECT * FROM cv_qualifications q
JOIN cv_educations e ON e.resume_id = q.resume_id
where q.qualifications_id IN (5,19)
and e.educations_id IN (13)
SELECT * в этом примере будет извлекать только из cv_qualifications, если вы хотите, чтобы поля из обеих таблиц вы могли заменить SELECT q.*, e.* FROM ...
Попробуйте с помощью одного запроса ВНУТРЕННЕЕ СОЕДИНЕНИЕ
select * FROM cv_qualifications as cq
INNER JOIN cv_educations as ce ON cq.resume_id=ce.resume_id
WHERE cq.qualifications_id IN (19,5) and ce.educations_id IN (13);
Посмотри на это :-
SELECT * FROM cv_qualifications q
JOIN cv_educations e ON e.resume_id = q.resume_id
where (q.qualifications_id = '5'
or q.qualifications_id = '9')
and e.educations_id = '13'"