我有一个需要帮助的人和一个提供帮助的人的表格。每个表与其他表的工作时间、爱好和活动都有一对多的关系。
我的问题是,当我创建一个过滤器来匹配它们时,我不能找出正确的查询集合来完全匹配它们。
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'
)
多个查询都可以实现