2011-09-26 52 views
0

我有一張需要幫助的人的桌子,還有一張幫助人的桌子。他們每個人都與進一步的工作時間,愛好和活動表有一對多的關係。PHP/MySQL關係數據庫問題。篩選以匹配選項

我的問題是,當我創建一個篩選器以匹配它們時,我無法弄清楚正確的查詢集合以完全匹配它們。

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; 
} 

,到目前爲止,功能就正確地返回具有匹配ATLEAST一個業餘愛好,匹配ATLEAST一個活動的個人助理。然而,我不能做的是讓它只返回匹配所有活動的人而不是一個,因爲這些都是必需的。

查詢字符串看起來像這樣至今:

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' 
    ) 
+0

你的問題的標題太模糊。此外,還不清楚你的函數是用什麼語言編碼的。 – Gili

+0

道歉,PHP MySQL – Ben

+0

你能給我們一些表格描述嗎?特別是每個表中的列名? – invertedSpear

回答

0

多個查詢將實現它