squadbrodyaga
@squadbrodyaga
帆は風を変えた

Как мне составить правильный SQL запрос?

Пытаюсь сделать небольшой запрос, суть которого это полнотекстовый поиск
в двух таблицах (multfilms и multserials) по колонке title

Вот что у меня получилось:
SELECT 
  *
FROM 
  multfilms,
  multserials 
WHERE
  to_tsvector(multfilms.title) @@ to_tsquery('Шрэк')
  or
  to_tsvector(multserials.title) @@ to_tsquery('Шрэк')


Шрэк есть только в таблице multfilms, а возвращает мне всю таблицу multserials,
я вообще не выкупаю как это работает, можете дать небольшой пример с пояснениями?
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
SELECT  *
FROM  multfilms as m
where m.title like '%Шрек%'
union
SELECT  *
FROM  multserials as m
where m.title like '%Шрек%'

union будет работать, при условии, что выборках одинаковое кол-во колонок и данные в них одинакового типа.

Но вообще, если вы под каждый тип контента создаете новую таблицу с почти однотипными атрибутами - значит, это признак того, что вы делаете ошибку проектирования с точки зрения архитектуры реляционных баз.
Правильно сделать так:
Сделать таблицу типа фильма по контенту:
film_content_type
С атрибутами:
id - идент. типа
full_name - полное название типа контента (фильм, мультфильм, сериал и т.д.)
... другие атрибуты типа фильма.

И у вас будет единственная таблица с фильмами:
films
атрибуты
id - идент. фильма
content_type_id - тип фильмового контента (внешний ключ к таблице film_content_type)
title - Название фильма
... другие атрибуты фильма

Тогда запрос будет такой:
SELECT  f.*, 
       t.full_name
FROM  films f
join film_content_type t on t.id = f.content_type_id
where f.title like '%Шрек%'

Вы можете спокойно добавлять новые типы фильмов в справочник типов, и добавлять новые атрибуты в таблицы, а основной каркас запросов поиска не поменяется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы