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');
                    }
                }
    ]
    });

因此,如果用户输入: mat 结果将是:

Mathio,Jay << 学生的名字和姓氏

Mark,Matt << 学生的名字和姓氏

在我的改变之后,它应该是这样的:

Mathio,Jay << 学生的名字和姓氏

Mark,Matt << 学生的名字和姓氏

数学<<科目

4

1 回答 1

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...

唯一需要注意的是,如果在两者中都找到了记录。为此,您需要决定要使用哪一个...

于 2013-05-12T17:18:32.277 回答