2010-01-30 4 views
4

допустит у меня есть этот mysql table structure:MySQL имя возвращение таблицы

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

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

есть способ для поиска строки в этих двух таблицах, а затем, если строка происходит вернуть имя таблицы и идентификатор строки?

ответ

3

Если предположить, что эти две таблицы имеют одинаковые типы данных для удостоверения личности и новости/контент затем запрос, вдоль линий

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

Я просто предполагаю здесь, но из таблицы имен я представляю себе, что он хочет, чтобы искать строку в виде подстрока, а не как точное совпадение. –

+0

yup, вы правы – kmunky

+0

@kmunky, изменил его в соответствии с вашими точными требованиями :) – Rob

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

Humm ... интересно, почему мой ответ получил нижний предел? Комментарии были бы полезны! –

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 one = ( – Rob

+0

ya, вы правы. – Rifat

Смежные вопросы