2013-05-12 34 views
3

我原來的查詢正在從文本字段中的一個術語,並開始[爲了在創建一個自動完成在一個表中的兩列尋找它查詢到多個表+搜索指定返回值

$query = $_GET['query'];  
$sql ="SELECT f_name, l_name FROM student WHERE (f_name ILIKE '%$query%' OR l_name ILIKE '%$query%'); 
$result = pg_query($con, $sql); 
while ($row = pg_fetch_array($result)) 
      { 
      $names[] = array('f_name' => $row[0], 'l_name' => $row[1]); 
      } 

    $name_list = array(); 
    $name_list['success']  = true; 
    $name_list['names']  = $names; 


    $name_list['totalCount'] = count($name_list['names']); 

echo json_encode($name_list); 

不,我想從其他表格(例如:主題)添加額外條件,因此用戶可以輸入學生的名字,姓氏或主題的一部分。我還需要知道返回值的類型,我的意思是如果這是一個名稱或主題。所以我可以根據類型顯示一個小圖標。

這是模型,所以你可以想像我是多麼做它:

 Ext.define("Post", { 
     extend: 'Ext.data.Model', 
      proxy: { 
     type: 'ajax', 
     url: 'app/search.php', 
     reader: { 
      type: 'json', 
      root: 'names', 

     autoLoad: true, 
      totalProperty: 'totalCount' 
     } 
    }, 

    fields: ['f_name','l_name' 
, { 
        name : 'display', 
        convert : function(v, rec) {       
         return rec.get('f_name') + ',' + rec.get('l_name'); 
        } 
       } 
    ] 
    }); 

因此,如果用戶輸入:墊 的結果將是:

Mathio,周杰倫< <學生的第一和姓氏

馬克,馬特< <學生的名和姓

我的變化之後,它應該是這樣的:

Mathio,周杰倫< <學生的名字和姓氏

馬克,馬特< <學生的名字和姓氏

數學< <標題

回答

1

你需要做的就是調整自己的原始查詢拿起學生在就讀(通過連接)的主題

SELECT f_name, l_name, subj.name 
FROM student stud 
JOIN subjects subj on subj.stud_id=stud.stud_id 
WHERE (f_name ILIKE '%$query%' OR l_name ILIKE '%$query%' 
           OR subj.name ILIKE '%query%'); 

現在該怎麼辦,你可能有學生和學科之間的倍數關係,所以你」我們需要調整SQL代碼以適應這一點。如果你把你的表結構,有人能跳,並告訴你如何做實際連接,你需要...

SELECT 'STUD' as theFlag,f_name, l_name, '' as SubjName 
FROM student stud 
WHERE (f_name ILIKE '%$query%' OR l_name ILIKE '%$query%') 
UNION 
SELECT 'SUBJ' as theFlag,'' as f_name,'' as l_name, subj.name as SubjName 
FROM subject 
WHERE (subj.name ILIKE '%query%'); 

現在你會得到一個紀錄回來了4列。第一列指出來源,並且將是STUD或SUBJ。對於STUD記錄,首字母和姓氏將被填充,SubjName字段將爲空白。對於SUBJ記錄,名字和姓氏將爲空白,但SubjName將填充...

唯一的警告將是如果在兩個中都找到記錄。爲此,你需要決定你想使用哪一個...

+0

謝謝,但我需要搜索的主題是簡單的,與學生無關。所以文本字段可以用來搜索學生或任何一般的主題 – Noon 2013-05-12 17:24:41

+0

查看我添加的新查詢... – Sparky 2013-05-12 18:11:41

+0

謝謝!但是如果我在兩者中都找到了這個詞,我可以用旗子告訴我它是學生還是學科嗎? – Noon 2013-05-12 18:17:57