Поиск в нескольких таблицах - PullRequest
0 голосов
/ 16 февраля 2010

Допустим, у меня есть дерево таблиц:

[ news ]
    id
    title
    text
    date

[ posts ]
    id
    title
    text
    date

[ gallery ]
    id
    title
    text
    date

Как выполнить поиск FULLTEXT в этих древовидных таблицах с помощью одного запроса ?

Я просто хочу запустить поиск по полям title и text и получить id, title, date и table name с результатами ... Возможно ли это?

»Обновление - Самое важное: мне нужно упорядочить результат по баллу FULLTEXT DESC (возможно смешивание разных результатов таблицы)

Ответы [ 2 ]

0 голосов
/ 16 февраля 2010

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

Попробуйте что-то вроде:

SELECT id, title, text, date, relevance
  FROM (
  SELECT id, title, text, date, MATCH(text) AGAINST (?) AS relevance
    FROM news
  UNION ALL
  SELECT id, title, text, date, MATCH(text) AGAINST (?) AS relevance
    FROM posts
  UNION ALL
  SELECT id, title, text, date, MATCH(text) AGAINST (?) AS relevance
    FROM gallery
  ) temp_sort_table
  ORDER BY relevance DESC
0 голосов
/ 16 февраля 2010

Если между таблицами существуют разумные отношения, присоедините их к этим отношениям.

Если это действительно одни и те же данные с разными идентификаторами, возможно, их следует повторно преобразовать в одну таблицу с полем type .

...