PDO从多个表中进行高级搜索

时间:2016-09-05 09:03:27

标签: php mysql

我正在尝试根据多个select boxesradio buttonsdropdowns创建人员搜索。

某些选择框是数组,因此我需要考虑所有选定的选项以显示结果。

服务,语言,工作经历等有不同的表格。

但我的逻辑出了点问题。目前,当我尝试搜索时,它是这样的:我从语言下拉菜单中选择英语,但没有人会说英语,所以没有正确的结果。然后,如果我选择其中一项服务(让我们坐下来清洁),那么会有一个结果,因为同一个人已将清洁列为他们的服务,但这是错误的,因为他不会说英语。

我在查询中使用union allLIKE,但是有人可以告诉我为什么它仍会显示结果吗?如果我做错了什么,请你指点我正确的方向吗?

到目前为止,这是我的查询和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);

1 个答案:

答案 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