Выборка записей из базы по списку меток, заданных в другой таблице?

В MySQL есть таблица с записями, так же в отдельной таблице лежат «id записи» — «id тега», которые обозначают, какие теги имеет обозначенная запись.

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


Вариант, при котором для каждой метки создается отдельное поле в таблице записи не подходит, т.к. при необходимости требуется добавить новую метку без изменений в коде sql-запроса.


Подскажите, каким sql-запросом сделать такую выборку?
  • Вопрос задан
  • 3027 просмотров
Решения вопроса 1
@0xE0
select Запись from ТаблицаСзаписями where idЗаписи in (select idЗаписи from ТаблицаСТегами where idТега = 'нужный тэг')
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Servn
SELECT r.*
    FROM Records r
    INNER JOIN Record_Tag rt ON rt.record_id = r.id
    INNER JOIN Tag t ON t.id = rt.tag_id
    WHERE t.name IN ('tag1','tag2','tag3,...,'tagN')


Выберет все записи (не уникальные) по тегам, для того чтобы выьрать уникальные нужно добавить DISTINCT, или группировку, смотря как вы собираетесь использовать эти данные.
Ответ написан
@0xE0
Ты хочешь чтобы в итоговой таблице каждый тег был отдельным полем? Или отдельной записью?
Ответ написан
Ваш ответ на вопрос

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

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