2011-07-19 35 views
1

多個數據源以下查詢工作正常,從一個表拉公司的名稱爲jquery的UI自動完成:Jquery的UI自動完成從使用UNION查詢

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

雖然我不知道您的UI自動填充表單的工作方式或期望的結果,但我還是比較喜歡。當你組合表時設置?你的用戶界面有多少列? – MacGyver

+0

對不起,只是試圖保持簡單。上面的兩個查詢都導致了一個名爲「name」的列。 jquery期待一個帶有標籤和值的數組,我將這兩個數組分配給「name」數組。不知道這是否是最佳做法,但我從我在網上找到的一個例子中得到它,它對於更簡單的查詢來說工作得很好。下面是相關的PHP: –

+0

而($行= mysql_fetch_array([SQL查詢],MYSQL_ASSOC)) \t { \t \t $數據[] =陣列( \t \t \t '標籤'=> $行['名'], \t \t \t'value'=> $ row ['name'] \t \t); \t} –

回答

1

見下面的粗體文字。

SELECT 不是Temptable。[名稱]
FROM(

SELECT名稱爲[名稱]
FROM公司

UNION ALL

SELECT TRIM(ISNULL(FNAME, '')+ '' + ISNULL(L-NAME, ''))爲[名稱]
FROM接觸

)AS 不是Temptable
WHERE
temptable.name LIKE「'。 mysql_real_escape_string($ _ REQUEST ['term'])。'%「

+0

感謝您的幫助...嘗試了這一改變,但仍然沒有運氣。我在原始文章中發佈了獨立於上面的jquery運行這些SQL查詢的結果。 –

+0

爲什麼第一個有LIMIT條款?另外,如果獨立運行聯繫人查詢,您會在結果集中獲得多少行? – MacGyver

+0

糟糕,PhpMyAdmin自動添加了LIMIT ..它不會出現在我的應用程序中,但結果是一樣的..聯繫人查詢獨立導致9行,雖然由於某種原因它說「顯示行0 - 8 9共)「 –