PHP / MySQL关系数据库问题。过滤以匹配选项

时间:2011-09-26 16:33:02

标签: php mysql database

我有一张需要帮助的人的桌子,以及一张提供帮助的人的桌子。他们每个人都有一对多的关系,还有工作时间,爱好和活动的表格。

我的问题是,当我创建一个过滤器以便匹配它时,我无法找出正确的查询集合以完全匹配它们。

function buildfilter(){
    if($_GET['filter']=="clear" || $_GET['filt_age']<>""){$_SESSION['filter']="";}
    if($_SESSION['filter']==""){$query="SELECT `personal_assistant`.*,`hobby`.* FROM `personal_assistant`,`hobby`,`citizen`,`citizenhobby` WHERE `personal_assistant`.`status`='active'";}
    if($_GET['filt_car']=="1"){$query.=" AND `personal_assistant`.`licence`='1' AND `personal_assistant`.`car`='1'";}
    if($_GET['filt_age']<>"any" AND $_GET['filt_age']<>""){
        $today=date ( 'Y-m-j' , time());
        $ages = explode("-", $_GET['filt_age']);
        $ages[0]=strtotime ('-'.$ages[0].' year', strtotime($today));
        $ages[1]=strtotime ('-'.$ages[1].' year', strtotime($today));
        $query.=" AND `personal_assistant`.`dob`>='".$ages[1]."' AND `personal_assistant`.`dob`<='".$ages[0]."'";
    }
    if($query<>""){
        $query.=" AND (`personal_assistant`.`id`=`hobby`.`pa_id` AND `hobby`.`hobby_option_id`=`citizenhobby`.`hobby_option_id` AND `citizen`.`id`=`citizenhobby`.`ci_id` AND `citizen`.`id`='".$_GET['edcit']."')";
        $query.=" AND (`personal_assistant`.`id`=`activity`.`pa_id` AND `activity`.`activity_option_id`=`citizenactivity`.`activity_option_id` AND `citizen`.`id`=`citizenactivity`.`ci_id` AND `citizen`.`id`='".$_GET

['edcit']."')";
    }
    if($query==""){$query=$_SESSION['filter'];}
    if($_SESSION['filter']==""){$_SESSION['filter']=$query;}

    return $query;
}

到目前为止,该功能将正确地返回任何具有至少一个匹配和至少一个匹配活动的爱好的个人助理。然而,我不能做的只是让它只返回匹配所有活动的人而不仅仅是一个,因为这些都是必需的。

到目前为止,查询字符串如下所示:

SELECT 
    `personal_assistant`.*,
    `hobby`.* 
FROM 
    `personal_assistant`,
    `hobby`,
    `citizen`,
    `citizenhobby` 
WHERE 
    `personal_assistant`.`status`='active' 
AND (
        `personal_assistant`.`id`=`hobby`.`pa_id` 
        AND 
        `hobby`.`hobby_option_id`=`citizenhobby`.`hobby_option_id` 
        AND 
        `citizen`.`id`=`citizenhobby`.`ci_id` 
        AND 
        `citizen`.`id`='6'
    ) 

1 个答案:

答案 0 :(得分:0)

多个查询可以实现它