2010-01-30 66 views
4

比方說,我有這個mysql table structureMySQL的返回表名

table : articles 
---------------- 
id 
content 

table : news 
------------ 
id 
news 

有沒有辦法來搜索這兩個表一個字符串,然後如果發生字符串返回表的名稱和行號?

回答

3

假設兩個表有ID和新聞/內容相同的數據類型,然後沿

SELECT id, 'articles' as tablename 
WHERE content like '%string to search for%' 
UNION 
SELECT id, 'news' as tablename 
WHERE news like '%string to search for%' 

線路查詢應該給你,你以後

+0

我只是猜測這裏,但是從表名我想,他要搜索的字符串作爲子串,而不是完全匹配。 – 2010-01-30 14:06:53

+0

yup,你是對的 – kmunky 2010-01-30 14:16:24

+0

@kmunky,改變它以符合你的確切要求:) – Rob 2010-01-30 14:32:09

1

你可以試試這個結果:

SELECT 'articles' as table_name, id 
FROM `articles` 
WHERE content like '%<my_string>%' 

UNION 

SELECT 'news' as table_name, id 
FROM `news` 
WHERE news like '%<my_string>%' 
+0

哼哼......想知道爲什麼我的回答得到了downvote?評論會有幫助! – 2010-01-30 19:17:14

1
SELECT * FROM (

SELECT id, content as text, 'articles' as tablename 
FROM articles 

UNION ALL 

SELECT id, news as text, 'news' as tablename 
FROM news 

) as tmp 

WHERE text = 'SEARCH_TERM' 
+1

MySql可能有點「非性能」(這是放置它的禮貌方式),所以以這種形式將兩個表首先聚合在一起的查詢可能比我自己和Cassy發佈的版本慢。可悲的是,查詢優化器並沒有像Sql Server那樣好 - ( – Rob 2010-01-30 14:37:17

+0

ya,你是對的。 – Rifat 2010-01-30 15:18:05