Jquery UI使用UNION查询从多个数据源自动完成

时间:2011-07-19 23:05:27

标签: php jquery sql jquery-ui jquery-ui-autocomplete

以下查询可以正常将公司名称从一个表中提取到jquery UI自动完成:

SELECT name FROM company WHERE name LIKE "'. mysql_real_escape_string($_REQUEST['term']) .'%"

结果循环到一个数组中并编码为JSON,然后返回到jquery并正确显示自动填充建议。

我正在尝试将其修改为从两个或更多表中提取:

SELECT name
FROM (
SELECT name
FROM company
UNION ALL SELECT CONCAT( fname,  ' ', lname ) 
FROM contact
) AS name
WHERE name LIKE  "'. mysql_real_escape_string($_REQUEST['term']) .'%"

此案例的目标是让自动填充列表包含公司名称和联系人姓名。当我独立于我的应用程序(仅使用PhpMyAdmin控制台)运行查询并带有示例搜索词时,它会成功显示所需的结果。但是在我的jquery ui自动填充表单的上下文中,它不会返回任何自动完成建议。

我将不胜感激任何建议。谢谢!

编辑:示例SQL结果

以下是我在PhpMyAdmin中使用测试查询“mi”运行每个查询时得到的结果。

我原来的单表源查询:

Generation Time: Jul 20, 2011 at 01:40 AM
Generated by: phpMyAdmin 3.3.9 / MySQL 5.5.8
SQL query: SELECT name FROM company WHERE name LIKE "mi%" LIMIT 0, 30 ; 
Rows: 6

name
[rows removed]

先生。万达建议修改:

Generation Time: Jul 20, 2011 at 01:50 AM
Generated by: phpMyAdmin 3.3.9 / MySQL 5.5.8
SQL query: SELECT temptable.name FROM ( SELECT name as name FROM company UNION ALL SELECT CONCAT( fname, ' ', lname ) as name FROM contact ) AS temptable WHERE temptable.name LIKE "mi%" ; 
Rows: 15

name
[rows removed]

两者都是有效的SQL,导致一个列的表包含名称的行,但只有第一个在jquery ui中工作。 =(

1 个答案:

答案 0 :(得分:1)

请参见下面的粗体文字。

SELECT temptable。[name]
FROM(

选择名称作为[名称]
  来自公司

UNION ALL

选择 TRIM(ISNULL(fname,'')+''+ ISNULL(lname,''))作为[名称]
  来自联系人

)AS temptable
在哪里 temptable.name LIKE“'。mysql_real_escape_string($ _ REQUEST ['term'])。'%”