2013-05-12 36 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