我的原始查询是从文本字段中取一个术语,并开始在一个表的两列中搜索它[按顺序创建自动完成]
$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');
}
}
]
});
所以如果用户输入:mat 结果将是:
Mathio,Jay<<学生的名字和姓氏
Mark,Matt<<学生的名字和姓氏
我的更改之后应该是:
Mathio,Jay<<学生的名字和姓氏
Mark,Matt<<学生的名字和姓氏
数学<<受试者
答案 0 :(得分: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 ...
唯一需要注意的是,如果在两者中都找到了记录。为此,您需要决定要使用哪一个......