JQuery UI Автозаполнение из нескольких источников данных с помощью запроса UNION - PullRequest
1 голос
/ 20 июля 2011

Следующий запрос работает правильно, чтобы вытащить названия компаний из одной таблицы в автозаполнение пользовательского интерфейса jquery:

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 029 *

1 Ответ

1 голос
/ 20 июля 2011

См. Полужирный текст ниже.

SELECT temptable. [Имя] ОТ (

ВЫБРАТЬ имя как [имя] ОТ компании

UNION ALL

SELECT TRIM (ISNULL (fname, '') + '' + ISNULL (lname, '')) как [имя] ОТ контакта

) AS temptable ГДЕ temptable.name LIKE "'. Mysql_real_escape_string ($ _ REQUEST [' term ']).'%"

...