Мне нужно выполнить поиск строки в 18 отдельных таблицах SQL. Поиск будет осуществляться в полях с разными именами и в нескольких полях в некоторых таблицах.

Хотя я могу добиться этого с помощью чего-то вроде приведенного ниже (первые 2 таблицы), я чувствую, что после объединения всех 18 таблиц код станет очень громоздким.

Есть ли способ уточнить этот код?

Также, когда будет предоставлен результат, могу ли я узнать с помощью PHP, из какой таблицы был получен ответ?

mysql_query("SELECT a.about,b.title,b.article,b.description

FROM about a 
JOIN articles b ON b.user=a.user

WHERE (upper(a.about)  LIKE'%".$val."%')  OR  (upper(b.title)  LIKE'%".$val."%') OR  (upper(b.article)  LIKE'%".$val."%') OR  (upper(b.descirption)  LIKE'%".$val."%')  ORDER BY $order $max");
1
Guesser 9 Мар 2014 в 20:08
Пахнет SQL-инъекцией...
 – 
Prix
9 Мар 2014 в 20:09
Что это за контент? Почему это в 18 разных таблицах? Такое ощущение, что это проблема дизайна базы данных, в первую очередь.
 – 
ItalyPaleAle
9 Мар 2014 в 20:10
Я согласен с @Qualcuno, звучит как недостаток дизайна базы данных. Что касается «узнать с помощью PHP, из какой таблицы пришел ответ», вы всегда можете пометить выбранные столбцы префиксом: «a.about as a_about».
 – 
Will
9 Мар 2014 в 20:12
Столы должны быть отдельными, так оно и есть.
 – 
Guesser
9 Мар 2014 в 20:19
1
Google "полный текст mysql". Стартер может быть: blog.marceloaltmann.com/… Если вы используете «LIKE», MySQL не может использовать индексы, и поэтому поиск может быть ОЧЕНЬ медленным (поскольку db должен каждый раз проходить все строки)
 – 
ItalyPaleAle
10 Мар 2014 в 01:38

2 ответа

Лучший ответ

Используйте UNION

SELECT about from some WHERE about like '%some%'
UNION 
SELECT about from some_other WHERE about like '%some%'

И если вы хотите разрешить повторяющиеся результаты, используйте UNION ALL

1
Hardy 9 Мар 2014 в 20:13

Взгляните на операцию UNION.

select x from table_1 where blabla
union
select y from table_2 where blabla

И так далее.

x и y должны быть одного формата.

0
Tom Fenech 9 Мар 2014 в 20:41
Я выбираю разные поля из каждой таблицы, хотя
 – 
Guesser
11 Мар 2014 в 14:12