2014-01-26 17 views
0

我想創建一個搜索特性,它在多個表和列中查找並返回主要思想。例如: (這是一個非常簡單的情況下,真正的表有辦法多個列中,我想搜索)Sql將列序列化爲一個記錄進行搜索

table 'lead': 
id | name | created 
1 | john | 1/1/2014 
2 | jack | 2/1/2014 

table 'notes': 
id | lead_id | created | note 
1 | 1  | 1/1/2014 | lead added 
2 | 1  | 1/2/2014 | some change occurred 
3 | 2  | 2/1/2014 | lead added 
4 | 2  | 2/2/2014 | some updates 

我想提供例如字符串「2014」,這將返回lead.id 1,2 或者尋找「更新」,這將返回lead.id 2.

我可以運行一個加入執行搜索每一次,或以某種方式創建一個視圖,它看起來像這樣:

id | text 
1 | john 1/1/2014 1/1/2014 lead added 1/2/2014 some change occurred 
2 | jack 2/1/2014 2/1/2014 lead added 2/2/2014 some updates 

這樣,th e搜索將在一張表中並且提供相當快的結果,「工作」在每次更新表'筆記'時更新每個記錄的記錄。 我知道一個視圖是做到這一點的最好方法,但我不清楚如何將連接結果序列化爲一個文本列。當然,使用php(或任何後端腳本)相當容易,但我想知道這是否可以以類似於視圖不斷更新的方式完成。

感謝您的協助。

+0

聽起來像一個搜索引擎的任務,而不是一個RDBMS。你有沒有考慮過像[Apache Solr](http://lucene.apache.org/solr/)或[Sphinx](http://sphinxsearch.com/)? – eggyal

+0

該功能是用於大量用戶/潛在客戶虛擬CRM服務的搜索框。這是所有php + mysql + jquery的巨大堆。我不明白搜索引擎的參考,但我會研究Solr和獅身人面像。 – Yaniv

回答

1

使用GROUP BYGROUP_CONCAT功能,somethink這樣的:

SELECT n.lead_id, CONCAT(l.name, " ", l.created, " ",GROUP_CONCAT(CONCAT(n.`created`," ",n.`note`), " ")) as text 
FROM notes n 
JOIN lead l ON l.id = n.lead_id 
GROUP BY n.`lead_id` 
ORDER BY n.`created` DESC 

CONCAT形式子消息1/1/2014 lead added,然後GROUP CONCAT聯接和外CONCAT形式導致消息john 1/1/2014 1/1/2014 lead added 1/2/2014 some change occurred

這裏是SQL Fiddle example

+0

感謝您提供快速解決方案。 – Yaniv

相關問題