我正在尝试根据多个select boxes
,radio buttons
和dropdowns
创建人员搜索。
某些选择框是数组,因此我需要考虑所有选定的选项以显示结果。
服务,语言,工作经历等有不同的表格。
但我的逻辑出了点问题。目前,当我尝试搜索时,它是这样的:我从语言下拉菜单中选择英语,但没有人会说英语,所以没有正确的结果。然后,如果我选择其中一项服务(让我们坐下来清洁),那么会有一个结果,因为同一个人已将清洁列为他们的服务,但这是错误的,因为他不会说英语。
我在查询中使用union all
和LIKE
,但是有人可以告诉我为什么它仍会显示结果吗?如果我做错了什么,请你指点我正确的方向吗?
到目前为止,这是我的查询和PHP代码:
if (isset($_POST['userServices']) && !empty($_POST['userServices'])){
$userServices = $_POST['userServices'];
for ($i = 0; $i < count($userServices); $i++) {
$services = $userServices[$i];
}
}
if (isset($_POST['languagesArray']) && !empty($_POST['languagesArray'])){
$languagesArray = $_POST['languagesArray'];
for ($i = 0; $i < count($languagesArray); $i++) {
$languages = $languagesArray[$i];
}
}
$search = $user_home->runQuery("
SELECT nanny_services.user_id, userFirstName
FROM hoidja.nanny_services
JOIN services on nanny_services.service_id = services.service_id
JOIN tbl_users ON tbl_users.user_id = nanny_services.user_id
WHERE (services.service_id LIKE :service_id)
GROUP BY nanny_services.user_id;
UNION ALL
SELECT user_language.user_id, userFirstName
FROM hoidja.user_language
JOIN languages on user_language.user_language_id = languages.user_language_id
JOIN tbl_users ON tbl_users.user_id = user_language.user_id
WHERE (languages.user_language_id LIKE :language_id)
GROUP BY user_language.user_id
");
$search->execute(array(
':service_id' => $services,
':language_id' => $languages,
));
$search_results = $search->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($search_results);
答案 0 :(得分:0)
像这样的东西
SELECT nanny_services.user_id, userFirstName
FROM hoidja.nanny_services
JOIN services on nanny_services.service_id = services.service_id
JOIN tbl_users ON tbl_users.user_id = nanny_services.user_id
WHERE (services.service_id = :service_id)
AND (languages.user_language_id = :language_id)
GROUP BY nanny_services.user_id;
没有UNION