2012-04-18 3 views
0

Итак, у меня есть около 6 таблиц с 6 столбцами каждый, например, адрес, имя и т. Д. Я должен реализовать функцию поиска, в которой пользователь вводит слово, и мне нужно искать всю мою базу данных (все 6 таблиц), чтобы найти слово, и когда слово найдено, эта строка должна быть возвращена из этой таблицы. Любая идея, как я могу это сделать?Как реализовать «поиск» в моей базе данных?

ответ

0

Используйте предложение LIKE и подстановочные знаки. (Пример PHP)

'Select * FROM Table_Nam WHERE column_Nam1 LIKE %' . $searchValue . '%'. 
    'OR column_Nam2 LIKE %' . $searchValue . '%'. 
    'OR column_Nam3 LIKE %' . $searchValue . '%'. 
    'OR column_Nam4 LIKE %' . $searchValue . '%'. 
    'OR column_Nam5 LIKE %' . $searchValue . '%'. 
    'OR column_Nam6 LIKE %' . $searchValue . '%'.; 
1

Предполагая, что все шесть таблиц имеют одинаковые имена столбцов, которые можно использовать этот запрос.

SELECT * FROM TABLE1 WHERE 
    col1 LIKE '%searchValue%' OR col2 LIKE '%searchValue%' OR 
    col3 LIKE '%searchValue%' OR col4 LIKE '%searchValue%' OR 
    col4 LIKE '%searchValue%' OR col6 LIKE '%searchValue%' 
UNION ALL 
SELECT * FROM TABLE2 WHERE 
    col1 LIKE '%searchValue%' OR col2 LIKE '%searchValue%' OR 
    col3 LIKE '%searchValue%' OR col4 LIKE '%searchValue%' OR 
    col4 LIKE '%searchValue%' OR col6 LIKE '%searchValue%' 
UNION ALL 
SELECT * FROM TABLE3 WHERE 
    col1 LIKE '%searchValue%' OR col2 LIKE '%searchValue%' OR 
    col3 LIKE '%searchValue%' OR col4 LIKE '%searchValue%' OR 
    col4 LIKE '%searchValue%' OR col6 LIKE '%searchValue%' 
and so on... 

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

SELECT col_a as COL1, col_b as COL2, col_c AS COL3, col_d AS COL4, col_e AS COL5, col_f as COL6 FROM TABLE1 WHERE .... 
UNION ALL 
SELECT col_q as COL1, col_w as COL2, col_e AS COL3, col_r AS COL4, col_t AS COL5, col_y as COL6 FROM TABLE2 WHERE .... 
etc.. 

Если ни один из двух запросы выше будут работать для вашей цели, вы все равно можете использовать одиночные запросы, выполняя шесть разных операторов select.

+0

В случае примера «union» я угадываю таблицу ('TABLE1',' TABLE2' и т. Д.), Что запись найдена также важна и должна быть включена в каждую строку, иначе не было бы понятия, из какой таблицы следует результат поиска. У меня возникнет соблазн придерживаться отдельных запросов, чтобы сделать его более очевидным (если исключительно важно, чтобы поиск выполнялся в одном запросе, и в этом случае я бы использовал хранимую процедуру). – sennett

+0

вы всегда можете узнать, из какой таблицы результат, просто добавив простой статический столбец в каждом select ... ie 'select table_1 as name ... from table1 .... union all select table_2 как имя из таблицы2 ... 'и т. д. и т.д. – Marcx

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