Поиск нескольких таблиц с MySQL - PullRequest
1 голос
/ 09 марта 2009

Я пишу программу на PHP / MySQL и хотел бы узнать, как искать в нескольких таблицах с использованием MySQL.

По сути, у меня есть окно поиска, как в правом верхнем углу большинства сайтов, и когда пользователь что-то ищет в этом поле, он должен искать в users.username, users.profile_text, uploads.title, uploads.description, sets .description and comments.text. Мне нужно получить идентификатор (хранится в поле идентификатора в каждой таблице) и, если возможно, выдержку в стиле Google.

Ответы [ 3 ]

5 голосов
/ 09 марта 2009

Вы можете написать свою процедуру для запроса каждой из этих таблиц по отдельности, или вы можете создать относительно простое представление, которое объединит все доступные для поиска столбцы важных таблиц вместе с индикатором, показывающим, из какой они таблицы. На самом деле не существует волшебного способа поиска в нескольких таблицах, кроме обычного написания операторов.

Второй подход будет выглядеть примерно так:

(SELECT 'Table 1' AS TableName, id as Id, text as Searchable
FROM table1)
UNION
(SELECT 'Table 2' AS TableName, table2_id as Id, name as Searchable
FROM table2)
UNION
...

Затем выполните поиск по полученному виду. Важно отметить, что этот метод не будет быстрым.

Аналогичным и более быстрым альтернативным вариантом было бы выделить таблицу для этой задачи вместо представления и заполнить ее при вставке / обновлении / удалении реальных таблиц вместо пересчета при доступе.

0 голосов
/ 11 января 2014

Возможно, вам нужен полнотекстовый поиск.

Посмотрите на

0 голосов
/ 09 марта 2009

Чтобы написать запрос на выборку, адаптированный для каждой из таблиц, вы можете объединить результаты, чтобы получить один набор результатов. Похоже, это будет выглядеть примерно так:

 select 'user-name', id, username from users where  username like '%term%'
 union
 select 'user-profile', id, profile from users where profile like '%term%'
 union
 select 'uploads-title', id, title from uploads where title like '%term%'
 union
 select 'uploads-description', id, description from uploads where description like '%term%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...